Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我采用的是把输入数据转换后放进二维数组,然后用每列和做加法运算,注释写的很清楚,请帮我看看,我debug一天,改了不少错误,但就目前的测试数据是没问题的//看到有说数组大小开到250,我改了之后还是不行 //思路是将arr这个数组的每一行附上输入的值,然后求每列所有数之和,当然进位 //maxlen记录这个二维数组的有用就是可以加的长度列数,row用来记录行数,那就不用遍历二维数组所有行列 #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char tempArr[250]; int arr[250][250],fin[250],i,row=0,maxlen=0,column; /*下面这个while循环用来把每次输入的字符串先放在tempArr里,然后转换,放到arr里面*/ while(scanf("%s",tempArr)!=EOF) { int len; len=strlen(tempArr); column=249; if(tempArr[0]=='0' &&len==1) break; for(i=len-1;i>=0;i--) { arr[row][column]=tempArr[i]-'0';//arr每一行最后几列用来存数字 column--; } row++;//row记录行数 if(maxlen<len) { maxlen=len;//记录输入的数中那个数的长度最长 } } /*下面就是大数加法的算法实现*/ int temp=0,index=249; for(column=249;column>(247-maxlen);column--)//从最后一列开始加 {//估计最多进两位,所以循环出去的条件我就随便写了,下面有跳过前导0的 int columnSum=0; for(i=0;i<row;i++) { columnSum+=arr[i][column]; } fin[index]=(columnSum+temp)%10;//对这个数组的赋值也是从fin最后开始的 temp=(columnSum+temp)/10; index--; } //得到第一个不为0的fin下标,从左至右 while(fin[index]==0) index++; //从哪个位置开始输出 for(i=index;i<=249;i++) { printf("%d",fin[i]); } printf("\n"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator