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 }