在c语言中我们不方便对字符串进行增删处理,所以我们可以用c++的string类对大整数进行方便的计算。
法一:翻转倒序相加型,这样可以避免字符串一长一短,从最低位开始相加,每次一次把计算结果插入到string字符串的最前面。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a,b,result;
while(cin>>a>>b)
{
int carry=0; //进位
const size_t n=a.size()>b.size()?a.size():b.size();
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
for(size_t i=0;i<n;i++)
{
int ai=i<a.size()?a[i]-'0':0;
int bi=i<b.size()?b[i]-'0':0;
int val=(ai+bi+carry)%10;
carry=(ai+bi+carry)/10;
result.insert(result.begin(),val+'0');
}
if(carry==1)
result.insert(result.begin(),'1');
cout<<result<<endl;
result.clear();
}
return 0;
}
法二:将较短的数的0补齐,然后从最低位开始相加
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a, b;
while (cin >> a >> b)
{
int temp = 0, carry = 0;
while (a.size()<b.size())
a = "0" + a;
while (a.size()>b.size())
b = "0" + b;
for (int i = a.size() - 1; i >= 0; i--)
{
temp = a[i] - '0' + b[i] - '0' + carry;
a[i] = temp%10 + '0';
if (temp / 10)
carry = 1;
else
carry = 0;
}
if (carry)
a = "1" + a;
cout << a << endl;
}
return 0;
}