很激动的奔来写这篇日志(虽然已经深更半夜) 想了有些时间 终于想出来这个大数加法的源码了 时间耦合度O(N)
跟其他代码一样 用的处理字符串的方法 不过不一样的是接受两数和的字符串我从尾部输入数据 避免了出现多出一位从头再处理一遍的状况 同时也是给两个字符串各一个下标变量 向前推进 自我感觉是比较高效率的代码(虽然因为半夜交的 运行时间不精确被加加嘲讽了一番→_→) 还是蛮兴奋的~~(另想吐槽分神的数据……说好的整数怎么能带前导0呢T^T害我WA了两次 差点有改代码的冲动……)
代码奉上:
#include
#include
int main()
{
char a[1502],b[1502],k[1503];
int i,j;
int lena,lenb,x;
while(~scanf("%s%s",a,b))
{
lena=strlen(a);
lenb=strlen(b);
k[1502]=0;
for(i=lena-1,j=lenb-1;i+1&&j+1;i--,j--)
{
k[1502-(lena-i)]=a[i]+b[j]-'0';
if(k[1502-lena+i+1]>'9')
{
k[1502-lena+i+1]='0'+k[1502-lena+i+1]-'9'-1;
k[1502-lena+i]++;
}
}
x=lena;
if(i>=0)
{
for(;i+1;i--)
{
k[1502-lena+i]=a[i];
if(k[1502-lena+i+1]>'9')
{
k[1502-lena+i+1]='0'+k[1502-lena+i+1]-'9'-1;
k[1502-lena+i]++;
}
}
x=lena;
}else if(j>=0)
{
for(;j+1;j--)
{
k[1502-lenb+j]=b[j];
if(k[1502-lenb+j+1]>'9')
{
k[1502-lenb+j+1]='0'+k[1502-lenb+j+1]-'9'-1;
k[1502-lenb+j]++;
}
}
x=lenb;
}
/*if(k[1502-x]>'9')
{
k[1502-x]='0'+k[1502-x]-'9'-1;
x++;
k[1502-x]='1';
}可忽略 处理前导的代码*/
while(k[1502-x]=='0') x--;
printf("%s\n",k+1502-x);
}
return 0;
}