Cプログラムで配列として表された2つの数値を加算する方法
配列で表される数値とは、数値の各桁が配列の1つの要素として格納される形式のことです。たとえば、
数値234は配列では {2, 3, 4} と表されます。
このような形式で表された2つの数値を加算するには、まず最下位桁の数字同士を足し合わせ、その合計が10以上であれば繰り上げを次の桁へ伝えます。その後、配列内の次の桁へ進みながら同じ手順を繰り返し、全体の合計を求めていきます。
実際に2つの数値を加算する例を見てみましょう。
a = {2, 9, 6}
b = {6, 3, 8}
出力:934
説明 − まず数値の最下位桁同士を加算します。6 + 8 = 14 となるため、ここで繰り上げが発生します。次の桁では 9 + 3 + 1 = 13 となり、再び繰り上げが発生します。さらに次の桁では 2 + 6 + 1 = 9 となります。以上の手順により、合計は 934 になります。
アルゴリズム
配列として格納された数値の合計を求めるには、まずどちらの数値がより多くの桁を持っているかを確認します。桁数が異なる場合は、小さい方の数値の桁数分だけ加算を行い、その後で大きい方の数値の残りの桁を順に処理していきます。
あわせて、加算時に発生する可能性のある繰り上げを追跡するための変数(キャリー)を用意します。初期値は0とし、各桁の加算処理ごとに適切な値へ更新します。こうして1桁ずつ合計を計算して結果を配列に格納し、最終的にその配列を出力します。
サンプルコード
#include <iostream>
using namespace std;
int Sum(int a[], int b[], int n, int m){
int sum[n];
int i = n - 1, j = m - 1, k = n - 1;
int c = 0, s = 0;
while (j >= 0) {
s = a[i] + b[j] + c;
sum[k] = (s % 10);
c = s / 10;
k--;
i--;
j--;
}
while (i >= 0) {
s = a[i] + c;
sum[k] = (s % 10);
c = s / 10;
i--;
k--;
}
for (int i = 0; i <= n-1; i++) {
cout<<sum[i];
}
}
int main(){
int a[] = { 5, 6, 9 };
int b[] = { 3, 8 };
int n = sizeof(a) / sizeof(a[0]);
int m = sizeof(b) / sizeof(b[0]);
cout<<"合計は ";
if (n >= m)
Sum(a, b, n, m);
else
Sum(b, a, m, n);
return 0;
}
出力
合計は 607
補足
このコードでは、569 + 38 = 607 のように桁数が変わらない加算は正しく処理できますが、999 + 99 のように最上位桁の繰り上げで結果の桁数が増えるケースは考慮されていません。そのような場合にも対応するには、すべての桁の処理が終わった後にキャリー変数 c を確認し、c が0でなければ先頭に追加して出力する処理を加えるとよいでしょう。
-
【Python】文字列として表現された2つの数値を加算して文字列で返す方法
2つの文字列 S と T が与えられ、それぞれが整数を表しているとします。この2つの数値を加算し、その結果を同じく文字列として返す必要があります。 例えば、入力が 256478921657 と 5871257468 の場合、出力は 262350179125 になります。これは、256478921657 + 5871257468 = 262350179125 となるためです。 解決の手順 この問題は、以下のステップで解決できます。 S と T を文字列から整数に変換する 2つの整数を加算する(ret = S + T) 結果の ret を文字列に変換して返す Pythonでは int() 関数
-
Pythonで2つの数値を加算するプログラム:ビット演算による実装方法
この記事では、2つの数値を加算するという問題に対する解法とアプローチについて詳しく解説します。 問題の概要 2つの大きな数値が与えられ、それらを加算した結果を出力することが求められます。 最も単純なアプローチは、オペランド同士を「+」演算子で結ぶ方法です。また、2つの数値をリストなどのイテラブルに格納し、Python標準ライブラリに用意されている組み込み関数 sum() を利用する方法もあります。 しかし、これらのアプローチでは10進数に対して直接演算を行うため、計算コストが増大するという課題があります。 ビット演算を用いた別のアプローチ そこで次に、数値をビット単位で操作する別のアプローチを