题目链接:https://acm.dingbacode.com/showproblem.php?pid=1002
大数加法题,不能直接用int或者longlong,要用数组存储每一位
这题最离谱的就是最后一个case后面只有一个回车,wa了好几次都因为这个
1 #include<stdio.h> 2 #include<string.h> 3 int main(){ 4 int n,count=1; 5 scanf("%d",&n); 6 7 while(n--){ 8 char s1[1005],s2[1005],s4[1005],s5[1005]; 9 int s3[1005]={0}; 10 int l1,l2,len,max; 11 scanf("%s%s",s1,s2); 12 strcpy(s4,s1); 13 strcpy(s5,s2); 14 15 l1=strlen(s1); 16 l2=strlen(s2); 17 18 if(l1>l2){ 19 len=l1; 20 for(int i=l2-1;i>=0;i--){ 21 s2[i+l1-l2]=s2[i]; 22 } 23 for(int i=0;i<l1-l2;i++){ 24 s2[i]=‘0‘; 25 } 26 }else if(l1<l2){ 27 len=l2; 28 for(int i=l1-1;i>=0;i--){ 29 s1[i+l2-l1]=s1[i]; 30 } 31 for(int i=0;i<l2-l1;i++){ 32 s1[i]=‘0‘; 33 } 34 }else{ 35 len=l1; 36 } 37 38 max=len; 39 40 int flag=0; //进位标志符 41 42 for(int i=len-1;i>=0;i--){ 43 if(flag){ 44 if((s1[i]-‘0‘)+(s2[i]-‘0‘)+1>9){ 45 flag=1; 46 s3[--len]=((s1[i]-‘0‘)+(s2[i]-‘0‘)+1)%10; 47 }else{ 48 flag=0; 49 s3[--len]=(s1[i]-‘0‘)+(s2[i]-‘0‘)+1; 50 } 51 }else{ 52 if((s1[i]-‘0‘)+(s2[i]-‘0‘)>9){ 53 flag=1; 54 s3[--len]=((s1[i]-‘0‘)+(s2[i]-‘0‘))%10; 55 }else{ 56 flag=0; 57 s3[--len]=(s1[i]-‘0‘)+(s2[i]-‘0‘); 58 } 59 } 60 } 61 62 if(flag){ 63 printf("Case %d:\n%s + %s = 1",count++,s4,s5); 64 65 }else{ 66 printf("Case %d:\n%s + %s = ",count++,s4,s5); 67 } 68 for(int i=0;i<max;i++){ 69 printf("%d",s3[i]); 70 } 71 72 if(n==0){ 73 printf("\n"); 74 }else{ 75 printf("\n\n"); 76 } 77 78 } 79 80 return 0; 81 }
原文:https://www.cnblogs.com/ocodehoney/p/15006163.html