ps:wa了好多次,然后才发现是输入的时候%s和%s要隔开一个空格,我想当然了...
代码:
#include "stdio.h" #include "string.h" char a[100000]; char b[100000]; char c[100000]; char d[100000]; int cal(); int main(){ int i,n1,n2,T,ncase=1; scanf("%d",&T); getchar(); while(T--){ scanf("%s %s",&a,&b); memset(c,'\0',sizeof(c)); //字符串清空 memset(d,'\0',sizeof(d)); cal(); n1=strlen(c); //c用来存算得后的结果,d是c不够位了就存在d n2=strlen(d); if(ncase!=1) puts(""); printf("Case %d:\n",ncase++); printf("%s + %s = ",a,b); if(n2>0) printf("%c",d[0]); for(i=0;i<n1;i++){ printf("%c",c[i]); } puts(""); memset(a,'\0',sizeof(a)); //重新清空a和b memset(b,'\0',sizeof(b)); } return 0; } int cal(){ int i,flag,j,n1,n2,m,flag1,m1,k1,k2; int c1,d1,sum; n1=strlen(a); //判断a和b的长度 n2=strlen(b); if(n1>n2){ m1=n1; flag=0; //flag用来记录谁长... } else if(n1<n2){ m1=n2; flag=1; } else if(n1==n2){ m=n1; flag=2; } flag1=0; for(;n1>0 && n2>0;n1--,n2--){ c1=a[n1-1]-'0'; //转成整数来相加 d1=b[n2-1]-'0'; if(c1+d1+flag1>=10){ sum=c1+d1-10+flag1; //判断是否需要进位 flag1=1; } else if(c1+d1+flag1<10){ sum=c1+d1+flag1; flag1=0; } c[(n1>n2?n1-1:n2-1)]=sum+'0'; //放到c组 } if(flag==0){ //如果是a长度比b长度长.. m=n1-n2; for(i=m-1;i>=0;i--){ sum=(a[i]-'0')+flag1; if(sum>=10){ flag1=1; c[i]=sum-10+'0'; } else{ flag1=0; c[i]=sum+'0'; } } if(flag1==1){ d[0]='1'; d[1]='\0'; } c[m1]='\0'; } else if(flag==1){ m=n2-n1; for(i=m-1;i>=0;i--){ sum=(b[i]-'0')+flag1; if(sum>=10){ flag1=1; c[i]=sum-10+'0'; } else{ flag1=0; c[i]=sum+'0'; } } if(flag1==1){ //如果位数超出了c数组,用d数组来存 d[0]='1'; d[1]='\0'; } c[m1]='\0'; } else if(flag==2){ //如果位数相同...用d数组来存.. c[m]='\0'; if(flag1>0){ d[0]='1'; d[1]='\0'; } else{ d[0]='\0'; } } return flag; }