大数相加

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     //大数四则之加
 6     char str1 [1000] = { 0 }, str2[1000] = { 0 }, tmp[1000] = { 0 }, str1_tmp[1000] = { 0 }, str2_tmp[1000] = { 0 };
 7     // ------1.获取输入-------
 8     printf("input1: ");
 9     gets(str1);
10     printf("input2: ");
11     gets(str2);
12     int str1_len = strlen(str1);
13     int str2_len = strlen(str2);
14     int MinLen = (str1_len < str2_len) ? str1_len : str2_len;
15     int MaxLen = (str1_len > str2_len) ? str1_len : str2_len;
16     // -------2.储存-------
17     //逆存 str1 数组 到 str1_tmp
18     int str1_len_num = str1_len;
19     for (int i = 0; i < str1_len_num; i++)
20     {
21         str1_tmp[i] = str1[str1_len - 1];
22         str1_len--;
23     }
24     //逆存 str2 数组 到 str2_tmp
25     int str2_len_num = str2_len;
26     for (int i = 0; i < str2_len_num; i++)
27     {
28         str2_tmp[i] = str2[str2_len - 1];
29         str2_len--;
30     }
31     // puts(str1_tmp);    // 测试 1234 -> 4321
32     // puts(str2_tmp);    //890 -> 098
33     // -------3.转换-------
34     //逆存    需要 先将 字符串 转换 为 数字
35     for (int i = 0; i < str1_len_num; i++)
36     {
37         str1_tmp[i] = str1_tmp[i] - 48;
38         //printf("str1_tmp[%d] = %d\n", i, str1_tmp[i]);
39     }
40     
41     for (int i = 0; i < str2_len_num; i++)
42     {
43         str2_tmp[i] = str2_tmp[i] - 48;
44         //printf("str2_tmp[%d] = %d\n", i, str2_tmp[i]);
45     }
46     //-------4.分 i = 0, i = MinLen 两部分 存入 tmp 作为结果数组(逆存)-------
47     //4.1
48     int temp = 0;
49     for (int i = 0; i < MinLen; i++)
50     {
51         tmp[i] = str1_tmp[i] + str2_tmp[i] + tmp[i];
52         temp = tmp[i];
53             if (tmp[i] >= 10)
54             {
55                 tmp[i] = tmp[i] % 10;
56                 tmp[i + 1] = 1;
57             }
58         //printf("tmp[%d] = %d\n", i, tmp[i]);
59     }
60     //4.2
61     if (MinLen != MaxLen)
62     {
63         for (int i = MinLen; i < MaxLen; i++)
64         {
65             if (str1_len_num > str2_len_num)
66             {
67                 tmp[i] = str1_tmp[i] + tmp[i];
68                 //printf("i = %d\n", i);
69             }
70             else
71                 tmp[i] = str2_tmp[i] + tmp[i];
72             //printf("Minlen = %d\n", MinLen);
73         }
74     }
75     //----------5.逆输
76     //5.1    当 俩数 相等 且 >= 0 时 需 在前 打印 一个 1
77     printf("ans = ");
78     if ((MinLen == MaxLen) && temp >= 10)
79     {    
80         printf("1");    
81     }
82     //5.2    逆向输出
83     for (int i = MaxLen-1; i >= 0; i--)
84     {
85         printf("%d", tmp[i]);
86     }
87 
88     return 0;
89 }

 

posted @ 2020-10-11 23:52  我太僵硬了  阅读(100)  评论(0)    收藏  举报