大数相加

 

/*
大数相加原理;用两个字符数组存储大数,
从低位到高位分别相加,遇到10以上就进1;
因为相加运算最多进一,因此在两个数组其中的
任意一个上加以都行。
*/

 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 }
View Code

 

posted on 2013-08-05 16:32  随风浪子的博客  阅读(130)  评论(0编辑  收藏  举报

导航