http://acm.hdu.edu.cn/showproblem.php?pid=1002
这道题从题目上看起来真的很简单,但越做越知道考虑的不足,弄的花了很多时间去做,最后也没有AC。报的错误是presentation error (结果输出表达错误),还是没找到表达哪错了,只好先放一放,开始坐别的题目。过阵子再看吧~~~
思路:定义三个char型数组,分别存放操作数和操作结果。
1)过滤输入数据:主要是实现0001 02 和0 0 的去0操作。
2)运算结果:从后往前扫描运算,得出的结果是从0到n的,所以输出的时候要注意颠倒就可以了~
#include<stdio.h> #include<string.h> char x[1002],y[1002],z[1002]; int xi,yi; const int Q = 48; int main() { int T,i,j,k,t,temp,maxi; char *max; while(scanf("%d",&T)!=EOF) { for(i=1;i<=T;i++) { memset(x,0,1002); memset(y,0,1002); memset(z,0,1002); xi=0;yi=0; scanf("%s %s",&x,&y); for(j=0;j<(int)strlen(x);j++) { if(x[j]!='0')break; } if(j==(int)strlen(x))j--; //zero strcpy(x,x+j); //delete the surpuls zero for(j=0;j<(int)strlen(y);j++) { if(y[j]!='0')break; } if(j==(int)strlen(y))j--; strcpy(y,y+j); printf("Case %d:/n",i); printf("%s",x); printf(" + "); printf("%s",y); printf(" = "); xi = strlen(x);yi = strlen(y); for(j=xi-1,k=yi-1,t=0;j>=0&&k>=0;j--,k--,t++) { if(x[j]+y[k]+z[t]-'0'>'9') { z[t]=x[j]+y[k]+z[t]-'0'-10; z[t+1]++; } else { z[t]=x[j]+y[k]+z[t]-'0'; } } if(xi>yi) { max = x;temp = j;maxi = xi; } else { max = y;temp = k;maxi = yi; } for(;temp>=0;temp--,t++) { if(max[temp]+z[t]>'9') { z[t]=max[temp]+z[t]-10; z[t+1]++; } else { z[t]=max[temp]+z[t]; } } if(z[maxi] !=0) //print out printf("%c",z[maxi]+'0'); for(j=maxi-1;j>=0;j--) { printf("%c",z[j]); } printf("/n/n"); } } return 0; }
一个参考的网址:http://acm.hdu.edu.cn/forum/read.php?tid=13804&fpage=0&page=1