大数相加
/*
大数相加原理;用两个字符数组存储大数,
从低位到高位分别相加,遇到10以上就进1;
因为相加运算最多进一,因此在两个数组其中的
任意一个上加以都行。
*/
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # include <stdio.h> 2 # include <string.h> 3 char str3[1000]; 4 void add(char str1[],char str2[]) 5 { 6 int i,j,l1,l2,num; 7 char str[1000]; 8 num=0; 9 if(strcmp(str1,str2) < 0) 10 { 11 strcpy(str,str1); 12 strcpy(str1,str2); 13 strcpy(str2,str); 14 } 15 l1=strlen(str1); 16 l2=strlen(str2); 17 for(i=l1-1,j=l2-1;i>=0;i--) //开始从低位到高位相加运算。 18 { 19 str3[i]=str1[i]+str2[j]-'0';//-‘0’说明str3保存的还是字符型。 20 if(j>0) 21 j--; //如果j<0;直接赋值成0等价于下一次操作没加。 22 else 23 str2[j]='0'; 24 while(str3[i] > '9')//进位操作。 25 { 26 str3[i]=str3[i]-10; 27 if(i == 0) //如果在i==0是出现进位,相当于出现999+111;此时输出的时候要 28 //多出一位 1。用num进行标记。 29 num=1; 30 else 31 str1[i-1]=str1[i-1]+1; 32 } 33 } 34 if(num==1) 35 { 36 for(i=l1-1;i>0;i--) 37 str3[i+1]=str3[i]; 38 str3[0]='1'; 39 printf("%s",str3); 40 } 41 else 42 printf("%s",str3); 43 } 44 int main() 45 { 46 char str1[1000],str2[1000]; 47 while(scanf("%s%s",str1,str2) != EOF) 48 { 49 getchar(); 50 add(str1,str2); 51 } 52 return 0; 53 }