当前编程题:实验三 大数、枚举问题(16级)---大整数加法 |
3. |
问题描述
求两个不超过200位的非负整数的和。
输入形式
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出形式
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入 22222222222222222222
33333333333333333333
样例输出
55555555555555555555
昨天不知道是电脑抽筋了还是这两个编译软件抽筋了 反正就是不会判断了 那么正确的代码 竟然不通过 哎 昨天很崩溃
#include<stdio.h> #include<string.h> int main() { char aa[200],bb[200]; int cc[200],i,j,lenth1,lenth2; memset(cc,0,sizeof(cc)); gets(aa); gets(bb); // puts(aa); // puts(bb); lenth1=strlen(aa); lenth2=strlen(bb); if(lenth1>=lenth2) { for(i=0;i<lenth1;i++) { aa[lenth1-1-i]-='0'; bb[lenth2-1-i]-='0'; if(lenth2-1-i>=0) { cc[i]+=aa[lenth1-1-i]+bb[lenth2-1-i]; } else { cc[i]+=aa[lenth1-1-i]; } } } else { for(i=0;i<lenth2;i++) { aa[lenth1-1-i]-='0'; bb[lenth2-1-i]-='0'; if(lenth1-1-i>=0) { cc[i]+=aa[lenth1-1-i]+bb[lenth2-1-i]; } else { cc[i]+=bb[lenth2-1-i]; } } } for(j=0;j<i;j++) { if(cc[j]>=10) { cc[j+1]+=cc[j]/10; cc[j]=cc[j]%10; } // printf("%d ",cc[j]); } // printf("\n"); if(cc[j]>0) { i++; } for(j=0;j<i;j++) { aa[j]=cc[i-j-1]+'0'; } aa[j]='\0'; puts(aa); return 0; } |