大数求和其实是个纯模拟,我们小学2年级老师就我们通过列竖式求加法,从个位开始加,进位+1,唯一需要值得注意的是我们求出来的结果要为有效值,即00001=1,0000=0
#include <iostream>
#include <string>
using namespace std;
string nAB(string A,string B);
string vCout(string A);
void vout(string A);
int main()
{
string nA,nB,nC;
while(cin>>nA>>nB)
{
nC=nAB(nA,nB); //求出A+B
nC=vCout(nC); //对C进行减0处理
vout(nC);
}
return 0;
}
string nAB(string A,string B)
{
int nlen,i,nc,nsum;
string s,c;
int nlena=A.size();
int nlenb=B.size();
if(nlena>=nlenb)
{
nlen=nlena;
c.resize(nlena-nlenb,'0');//给c分配lena-nlenb的内存大小,放0
B=c+B; //把B长度补齐
}
else
{
nlen=nlenb;
c.resize(nlenb-nlena,'0');
A=c+A; //把A长度补齐
}
s.resize(nlen,'0');
nc=0; //nc表示进位符
for(i=nlen-1;i>=0;i--)
{
nsum=(A[i]-'0')+(B[i]-'0')+nc;
s[i]=(char)(nsum%10+'0');
nc=nsum/10;
}
if(nc==1)
{
s='1'+s;
}
return s;
}
string vCout(string A)
{
int i;
string s;
for(i=0;i<A.size();i++)
{
if(A[i]!='0')
{
break;
}
}
if(i==A.size())
{
s='0';
}
else
{
s=A.substr(i,A.size()-i); //获得从i开始长度为A.size()-i的字符串
}
return s;
}
void vout(string A)
{
cout<<A<<endl;
}