先将num1中的复制到result,再和num2相加
1 #include <stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #define MAX(A,B) ((A)>(B)?(A):(B))
5 #define NUMLEN 1000
6 #define SUMLEN 1001
7 void BigNumAdd(char *num1,char *num2,char *result);
8 int main()
9 {
10 int i,n;
11 scanf("%d",&n);
12 char num1[NUMLEN+1],num2[NUMLEN+1],result[SUMLEN+1];
13 for(i=1;i<=n;i++)
14 {
15 scanf("%s%s",num1,num2);
16 printf("Case %d:\n",i);
17 printf("%s + %s = ",num1,num2);
18 BigNumAdd(num1,num2,result);
19 int j=0;
20 while(result[j]=='0')
21 j++;
22 if(j==SUMLEN)
23 printf("0\n");
24 else
25 printf("%s\n",result+j);
26 if(i<n)
27 printf("\n");
28 }
29 return 0;
30 }
31 void BigNumAdd(char *num1,char *num2,char *result)
32 {
33 int len1=strlen(num1);
34 int len2=strlen(num2);
35 int maxlen=MAX(len1,len2);
36 int i=0,j=0;
37 for(i=0;i<len1;i++)
38 num1[i]-='0';
39 for(i=0;i<len2;i++)
40 num2[i]-='0';
41 memset(result,0,(SUMLEN+1)*sizeof(char));
42 //strncpy(result+(SUMLEN-len1),num1,len1);//已/0开头的字符串导致strcpy无法复制
43 for (i = 0; i <len1; i++)
44 result[SUMLEN-len1+i] = num1[i];
45
46 for(j=SUMLEN-1,i=len2-1;i>=0;i--,j--)
47 result[j]+=num2[i];
48 for(j=SUMLEN-1;j>=SUMLEN-maxlen;j--)
49 if(result[j]>=10)
50 result[j]-=10,result[j-1]++;
51
52 for(i=0;i<SUMLEN;i++)
53 result[i]+='0';
54
55
56 }