杭电1002,我测试的数据都对,但是提交时错误的,实在找不到哪儿有问题,大神给看看,拜谢
http://acm.hdu.提交后,反馈结果是错误,请大神给看看,代码哪儿有错误。
我的代码:
程序代码:
#include <stdio.h> #include <string.h> #include <memory.h> void daozhuan(char s[],int len){//将字符串对调,例如123对调为321 int j,t; for(j=0;j<len/2;j++){ t=s[j]; s[j]=s[len-j-1]; s[len-j-1]=t; } } void sum(char s[],char a[],char b[]){//求a+b的和 s int i,j,lena,lenb,n,t; lena=strlen(a); lenb=strlen(b); n=(lena>lenb) ? lenb : lena;//n取两字符串中长度最小的值 daozhuan(a,lena);//对调a与b,从个位逐个相加 daozhuan(b,lenb); for(i=0;i<n;i++){ s[i]=a[i]+b[i]-48;//从个位开始相加后存入s中(s中的元素允许有大于字符9的字符,此时不存在进位) } while(i<lena){//如果a的长度比b大,则将a中多余的位照搬进s中 s[i]=a[i++]+s[i]-48; } while(i<lenb){//如果b的长度比a大,则将b中多余的位照搬进s中 s[i]=b[i++]+s[i]-48; } j=0; while(j<i){//处理s中大于字符9的元素 if(s[j]>'9'){ t=s[j]-48; s[j]-=10*(t/10); s[j+1]+=t/10; } j++; } s[i+1]='\0'; daozhuan(s,i+1); } void print(char s[],int len){ int flag=1,i; for(i=0;i<len;i++){//从第一个不为0的元素开始,输出s的值;如果全部为0,结果输出0 if(s[i]=='0' && flag && i!=len-1) continue; else{ flag=0; printf("%c",s[i]); } } printf("\n"); } int main(){ char a[1002],b[1002],s[1002],ta[1002],tb[1002]; int T,cnt=1; scanf("%d",&T); while(T--){ scanf("%s%s",a,b); strcpy(ta,a); strcpy(tb,b); memset(s,'0',sizeof(s)); sum(s,a,b); printf("Case %d:\n",cnt++); printf(ta);printf(" + ");printf(tb); printf(" = "); print(s,strlen(s)); printf("\n"); } return 0; }