前幾天視頻面試,被問到怎麼實現大數相加,我想了想應該用數組接收,然後逐位相加,另外還需要設置進位符,大於10進位。按照這個想法,我用c++寫個簡單的代碼,也沒有思考有沒有其他思路。
#include<iostream>
using namespace std;
int main() {
char s1[200], s2[200];
int a[200], b[200],sum[201];
int len1,len2,flag = 0,maxlen;
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(sum, 0, sizeof(sum));
cin >> s1 >> s2;
len1 = strlen(s1);
len2 = strlen(s2);
if (len1 < len2) {
maxlen = len2;
}
else
{
maxlen = len1;
}
int p = maxlen; //將兩個數組按最大長度右對齊
for (int i = len1 - 1; i >= 0; i--) {
a[p] = s1[i] - '0';
p--;
}
p = maxlen;
for (int i = len2 - 1; i >= 0; i--) {
b[ p] = s2[i] - '0';
p--;
}
//從數組右邊開始相加,flag作爲進位標誌
p = maxlen;
while (maxlen >=0)
{
sum[maxlen] = (a[maxlen] + b[maxlen] + flag) % 10;
flag = (a[maxlen] + b[maxlen]) / 10;
maxlen--;
}
int i = 0;
if (sum[i] == 0) {
i++;
}
while (i <= p)
{
cout << sum[i];
i++;
}
return 0;
}