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 |
求解释,本程序经过测试没有问题的,但是提示WA,求大牛帮解释#include <stdio.h> #include <string.h> char str[150][110],a[150][2],result[200]; void change(int n){ int i; char temp; for(i=0;i<strlen(str[n])/2;i++) { temp=str[n][i]; str[n][i]=str[n][strlen(str[n])-1-i]; str[n][strlen(str[n])-1-i]=temp; } } int main() { int i=0,n=0,max=0,j; memset(str,'\0',16500); for(i=0;i<150;i++) a[i][0]=a[i][1]=0; for(i=0;i<200;i++) result[i]=0; scanf("%s",str[n++]); while(str[n-1][0]!='0'||str[n-1][1]!='\0') { scanf("%s",str[n++]); } n--; for(i=0;i<n;i++){ change(i);//将输入的大数按照相反的方向保存,让小的在左边,大的在右边 if(max<strlen(str[i])) max=strlen(str[i]); } //进行一次计算,算出每一个数的第一位,第二位,第三位,保存在100×3的字符串数组中 for(i=0;i<max;i++) { a[i][0]=a[i][1]=a[i][2]=0; for(j=0;j<n;j++) { if(str[j][i]=='\0') continue; a[i][0]+=str[j][i]-'0'; a[i][1]+=a[i][0]/10; a[i][0]=a[i][0]%10; if(a[i][1]>=10) a[i+1][0]+=a[i][1]/10; a[i][1]=a[i][1]%10; } } //进行第二次计算结果,保存到110位的字符型数组中,还是倒序,等待输出的时候正序的输出 result[0]=a[0][0]; result[1]=a[1][0]+a[0][1]; if(result[1]>=10) { result[2]+=result[1]/10; result[1]=result[1]%10; } for(i=2;i<max+2;i++){ result[i]+=a[i][0]+a[i-1][1]; if(result[i]>=10) { result[i+1]+=result[i]/10; result[i]=result[i]%10; } } if(result[max+1]!=0) { i=max+1; if(result[max+1]>=10){ result[max+2]=result[max+1]/10; result[max+1]=result[max+1]%10; i=max+2; } } else if(result[max]!=0){ i=max; if(result[max]>=10) { result[max+1]=result[max]/10; result[max]=result[max]%10; i=max; } } else i=max-1; for(;i>-1;i--) printf("%c",result[i]+'0'); 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