【洛谷】 P1601 A+B Problem(高精)
主要wa出在 999+1 的进位上,需要进行一步一步的判断。
题解:
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
string a,b;
cin>>a;
cin>>b;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int na=a.length();
int nb=b.length();
int a1[na];
int b1[nb];
int c[na+nb];
for(int i=0;i<na;i++)
a1[i]=int(a[i])-48;
for(int i=0;i<nb;i++)
b1[i]=int(b[i])-48;
int minn;
if(nb>na)
{
minn=na;
for(int i=0;i<minn;i++)
{
int x=a1[i]+b1[i];
c[i]=x%10;
if(x>=10) x=x/10;
else x=0;
b1[i+1]=b1[i+1]+x;
}
for(int i=minn;i<nb-1;i++)
{
if(b1[i]>=10)
{
b1[i+1]=b1[i+1]+1;
c[i]=b1[i]%10;
b1[i]=b1[i]%10;
}
}
if(b1[nb-1]>=10)
{
cout<<1;
b1[nb-1]=b1[nb-1]%10;
}
for(int i=nb-1;i>=minn;i--)
cout<<b1[i];
for(int i=minn-1;i>=0;i--)
cout<<c[i];
}
else if(nb<na)
{
minn=nb;
for(int i=0;i<minn;i++)
{
int x=a1[i]+b1[i];
c[i]=x%10;
if(x>=10) x=x/10;
else x=0;
a1[i+1]=a1[i+1]+x;
}
for(int i=minn;i<na-1;i++)
{
if(a1[i]>=10)
{
a1[i+1]=a1[i+1]+1;
c[i]=a1[i]%10;
a1[i]=a1[i]%10;
}
}
if(a1[na-1]>=10)
{
cout<<1;
a1[na-1]=a1[na-1]%10;
}
for(int i=na-1;i>=minn;i--)
cout<<a1[i];
for(int i=minn-1;i>=0;i--)
cout<<c[i];
}
else if(nb==na)
{
minn=nb;
for(int i=0;i<minn;i++)
{
int x=a1[i]+b1[i];
c[i]=x%10;
if(x>=10) x=x/10;
else x=0;
a1[i+1]=a1[i+1]+x;
}
if((a1[na-1]+b1[nb-1])/10!=0)
cout<<(a1[na-1]+b1[nb-1])/10;
for(int i=minn-1;i>=0;i--)
cout<<c[i];
}
cout<<endl;
return 0;
}