C++ 大整数加法模板
string add(string a,string b)
{
//去掉前面无所谓的0
a=a.substr(a.find_first_not_of('0'));
b=b.substr(b.find_first_not_of('0'));
long long len1=a.length();
long long len2=b.length();
//考虑到进位,总长度要大于len1,len2的max
long long len=max(len1,len2)+10;
//将ans赋0
string ans(len,'0');
//反转,便于加法运算
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
//将a赋给ans
for(int i=0;i<len1;i++)
ans[i]=a[i];
//tmp进位
int tmp=0;
for(int i=0; i<len; i++)
{
if(len1>=len2)//考虑a>=b
{
if(i<len2)
{
tmp+=(ans[i]-'0')+(b[i]-'0');
}
else
{
tmp+=(ans[i]-'0');
}
ans[i]=tmp%10+'0';
tmp/=10;
}
else if(len1<len2)//a<b
{
if(i<len1)
{
tmp+=(ans[i]-'0')+(b[i]-'0');
}
else if(i<len2)
{
tmp+=(b[i]-'0');
}
ans[i]=tmp%10+'0';
tmp/=10;
}
}
//反转
reverse(ans.begin(),ans.end());
//输出去掉前面无所谓的0
return ans.substr(ans.find_first_not_of('0'));
}
测试代码
#include<bits/stdc++.h>
using namespace std;
string add(string a,string b)
{
//去掉前面无所谓的0
a=a.substr(a.find_first_not_of('0'));
b=b.substr(b.find_first_not_of('0'));
long long len1=a.length();
long long len2=b.length();
//考虑到进位,总长度要大于len1,len2的max
long long len=max(len1,len2)+10;
//将ans赋0
string ans(len,'0');
//反转,便于加法运算
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
//将a赋给ans
for(int i=0;i<len1;i++)
ans[i]=a[i];
//tmp进位
int tmp=0;
for(int i=0; i<len; i++)
{
if(len1>=len2)//考虑a>=b
{
if(i<len2)
{
tmp+=(ans[i]-'0')+(b[i]-'0');
}
else
{
tmp+=(ans[i]-'0');
}
ans[i]=tmp%10+'0';
tmp/=10;
}
else if(len1<len2)//a<b
{
if(i<len1)
{
tmp+=(ans[i]-'0')+(b[i]-'0');
}
else if(i<len2)
{
tmp+=(b[i]-'0');
}
ans[i]=tmp%10+'0';
tmp/=10;
}
}
//反转
reverse(ans.begin(),ans.end());
//输出去掉前面无所谓的0
return ans.substr(ans.find_first_not_of('0'));
}
int main()
{
string a,b;
int n;
cin>>n;
while(n--)
{
cin>>a;
cin>>b;
cout<<add(a,b)<<endl;
}
return 0;
}