大数相加
- 就是小学学的加法运算规则
- 将数字串转换为字符串,相加逆序输出
代码如下:
#include<iostream>
using namespace std;
#include<cstring>
#define L 10000
string add(string a, string b)
{
string ans;
int na[L], nb[L]; //用来存两个数串
int la = a.size(), lb = b.size();
for(int i = 0; i < la; i++) na[la - i - 1] = a[i] - '0'; //分别将两个字符串转换为数字串
for(int i = 0; i < lb; i++) nb[lb - i - 1] = b[i] - '0';
int lmax = la > lb ? la : lb; //找出最大的长度
for(int i = 0; i < lmax; i++ ) //模拟一下两个数相加进位等等
{
na[i] += nb[i];
na[i + 1] += na[i] / 10;
na[i] %= 10;
}
if(na[lmax]) lmax++; //是否第一位往前进位
for(int i = lmax - 1; i >= 0; i--) ans += na[i] + '0'; // 将数字串na[i]逆序转换为 字符串ans; "+"相当于直接连接两个字符串,可以这么理解
return ans;
}
int main()
{
string a, b;
while(cin >>a >>b){
cout << add(a, b)<<endl;
}
return 0;
}