解题报告:本题就是用数组模拟大数的相加,输入的第一行是一个n,表示有n组测试数据,输入有多个大数,输入以0结尾。用数组模拟加法就可以了,编写一个
add(char *)函数,没输入一次都将对应的位置的值加到和里面去,保存结果的数组应该定义一个int型的数组。而且数组的第一位应该保存呢结果的最高位,这样就可以方便地进行进位,只是记得在输出的时候要倒过来输就可以了。还有一个要注意的是,本题的格式比较坑,表示交了十多次都PE,因为看了disscuss里面一位同学错误的格式,晕,格式只要在输出结果的后面空一行就可以了,但测试数据的最后一组后面不要空行、
View Code
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 char str[10005]; 5 int sum[10005]; 6 void add(char *Str) { 7 int len=strlen(Str); 8 int z=1; 9 for(int i=len-1;i>=0;--i) { 10 sum[z]+=(Str[i]-'0'); 11 sum[z+1]+=sum[z]/10; 12 sum[z]%=10; 13 z++; 14 } 15 } 16 int main() { 17 int Case; 18 scanf("%d",&Case); 19 while(Case--) { 20 memset(sum,0,sizeof(sum)); 21 int n=0; 22 while(scanf("%s",str)&&str[0]!='0') 23 add(str); 24 int biaoji=0; 25 for(int i=10000;i>1;--i) 26 if(biaoji==0&&sum[i]==0) 27 continue; 28 else { 29 biaoji=1; 30 printf("%d",sum[i]); 31 } 32 printf("%d\n",sum[1]); 33 if(Case!=0) 34 printf("\n"); 35 } 36 return 0; 37 }