user-0 提问: 求助：杭电oj,1002，高精度加法，我是用数组做，但没结果，请问哪里错？

回复:
user: user-0
content: 找到错误了，谢谢大家。少了让进位归0. #include<stdio.h> #include<string.h> #define MAX 10000 int main() { 	int n,u; 	scanf("%d",&n);  	if(n>=0&&n<=20) 	{ 	for(u=1;u<=n;u++) 	{ 		char a[MAX]; 		char b[MAX]; 		int j,lena,lenb,k; 		scanf("%s",a); 		scanf("%s",b); 		lena=strlen(a); 		lenb=strlen(b); 		int c[MAX],d[MAX]; 		memset(c,0,sizeof(c)); 		memset(d,0,sizeof(d)); 		for(j=0,k=lena-1;k>=0;k--) 		{ 			c[j++]=a[k]-'0'; 		} 		for(j=0,k=lenb-1;k>=0;k--) 		{ 			d[j++]=b[k]-'0'; 		} 		int m; 		int jinwei=0; 		int result[MAX]; 		int local; 		if(lena>=lenb) 		{ 			local=lena; 		} 		else 		{ 			local=lenb; 		} 		memset(result,0,sizeof(result)); 		for(m=0;m<=local;m++) 		{ 			result[m]=c[m]+d[m]+jinwei; 			if(result[m]>=10) 			{ 				jinwei=result[m]/10; 				result[m]=result[m]%10; 			} 			else 				jinwei=0; 		} 		if(result[local]==0) 		{ 			local--; 		} 		printf("Case %d:\n",u); 		printf("%s + %s = ",a,b); 		for(m=local;m>=0;m--) 		{ 			printf("%d",result[m]); 		} 		if(u==n) 		{ 			printf("\n"); 		} 		else 		{ 			printf("\n\n"); 		} 	} 	} 	return 0; }

user: user-1
content: 引用 5 楼 qq_42767647 的回复:我把程序改成下面这个，自己测试出来的答案是对的，但是怎么在杭电上一直wrong answer？？  #include<stdio.h> #include<string.h> #define MAX 1001 int main() { 	int n,u; 	scanf("%d",&n);  	if(n>=0&&n<=20) 	{ 	for(u=1;u<=n;u++) 	{ 		char a[MAX]; 		char b[MAX]; 		int j,lena,lenb,k; 		scanf("%s",a); 		scanf("%s",b); 		lena=strlen(a); 		lenb=strlen(b); 		int c[MAX],d[MAX]; 		memset(c,0,sizeof(c)); 		memset(d,0,sizeof(d)); 		for(j=0,k=lena-1;k>=0;k--) 		{ 			c[j++]=a[k]-'0'; 		} 		for(j=0,k=lenb-1;k>=0;k--) 		{ 			d[j++]=b[k]-'0'; 		} 		int m; 		int jinwei=0; 		int result[MAX]; 		int local; 		if(lena>=lenb) 		{ 			local=lena; 		} 		else 		{ 			local=lenb; 		} 		int spot=0; 		memset(result,0,sizeof(result)); 		for(m=0;m<=local;m++) 		{ 			result[m]=c[m]+d[m]+jinwei; 			if(result[m]>=10) 			{ 				jinwei=result[m]/10; 				result[m]=result[m]%10; 			} 			if(result[m]) 				spot=m;  		} 		if(result[local]==0) 		{ 			local--; 		} 		printf("Case %d:\n",u); 		printf("%s + %s = ",a,b); 		for(m=local;m>=0;m--) 		{ 			printf("%d",result[m]); 		} 		if(u==n) 		{ 			printf("\n"); 		} 		else 		{ 			printf("\n\n"); 		} 	} 	} 	return 0; } 你贴出来你的测试用例。 你用123456 + 123456的结果是不是对的。还有1+123456789，看一下结果是不是对的。 可能你的测试用例不够普遍性

user: user-2
content: 你这个程序他根本跑不起来

user: user-3
content: 仅供参考：#include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110

user: user-0
content: 我把程序改成下面这个，自己测试出来的答案是对的，但是怎么在杭电上一直wrong answer？？  #include<stdio.h> #include<string.h> #define MAX 1001 int main() { 	int n,u; 	scanf("%d",&n);  	if(n>=0&&n<=20) 	{ 	for(u=1;u<=n;u++) 	{ 		char a[MAX]; 		char b[MAX]; 		int j,lena,lenb,k; 		scanf("%s",a); 		scanf("%s",b); 		lena=strlen(a); 		lenb=strlen(b); 		int c[MAX],d[MAX]; 		memset(c,0,sizeof(c)); 		memset(d,0,sizeof(d)); 		for(j=0,k=lena-1;k>=0;k--) 		{ 			c[j++]=a[k]-'0'; 		} 		for(j=0,k=lenb-1;k>=0;k--) 		{ 			d[j++]=b[k]-'0'; 		} 		int m; 		int jinwei=0; 		int result[MAX]; 		int local; 		if(lena>=lenb) 		{ 			local=lena; 		} 		else 		{ 			local=lenb; 		} 		int spot=0; 		memset(result,0,sizeof(result)); 		for(m=0;m<=local;m++) 		{ 			result[m]=c[m]+d[m]+jinwei; 			if(result[m]>=10) 			{ 				jinwei=result[m]/10; 				result[m]=result[m]%10; 			} 			if(result[m]) 				spot=m;  		} 		if(result[local]==0) 		{ 			local--; 		} 		printf("Case %d:\n",u); 		printf("%s + %s = ",a,b); 		for(m=local;m>=0;m--) 		{ 			printf("%d",result[m]); 		} 		if(u==n) 		{ 			printf("\n"); 		} 		else 		{ 			printf("\n\n"); 		} 	} 	} 	return 0; }

user: user-1
content: #include<stdio.h> #include<string.h>  //#define MAX 10000 #define MAX     1024  int main() {     int n;     scanf("%d",&n);     while(n--)     {         char a[MAX];         char b[MAX];         int j,lena,lenb,k;         //lena=strlen(a);         //lenb=strlen(b);         scanf("%s",a);         scanf("%s",b);          lena=strlen(a);         lenb=strlen(b);          int c[MAX],d[MAX];         memset(c,0,sizeof(c));         memset(d,0,sizeof(d));         for(j=0,k=lena-1;k>=0;k--)         {             c[j++]=a[k]-'0';         }         for(j=0,k=lenb-1;k>=0;k--)         {             d[j++]=b[k]-'0';         }         int m;         int jinwei=0;         int result[MAX];         int local;         if(lena>=lenb)         {             local = lena;         }         else         {             local = lenb;         }         int spot=0;         memset(result,0,sizeof(result));         for(m=0;m<local+1;m++)         {             result[m]=c[m]+d[m]+jinwei;             if(result[m]>=10)             {                 jinwei=result[m]/10;                 result[m]=result[m]%10;             } else  {                 jinwei = 0;   //注意不是每次都进位的             }             if(result[m])                 spot=m;         }         printf("Case %d:\n",n);         printf("%s+%s=",a,b);         for(m=local;m>=0;m--)         {             printf("%d",result[m]);         }         printf("\n");     }     return 0; }  参考一下吧

user: user-4
content: 看了几行就看不下去了。  char a[MAX]; char b[MAX]; int j,lena,lenb,k; lena=strlen(a); lenb=strlen(b);  a, b数组还没有内容，你取字符串长度结果肯定不对。后面代码自己好好读读有没有类似错误。