题目
![]()
源代码
1 #include <iostream>
2 using namespace std;
3 int a[1000001], b[1000001], c[1000001];
4 int main()
5 {
6 string s1, s2;
7 cin >> s1;
8 cin >> s2;
9 //将两个大数存入数组a和b中
10 for (int i = 0; i < s1.length(); i++)
11 {
12 a[i] = s1[s1.length() - 1 - i] - '0';
13 }
14 for (int i = 0; i < s2.length(); i++)
15 {
16 b[i] = s2[s2.length() - 1 - i] - '0';
17 }
18 //此时,数组中第一位是个位,第二位是十位,依次类推
19 int num;//表示位数相加的次数 例如100+99需要位数相加三次(个位,十位,百位)
20 if (s1.length() < s2.length())
21 {
22 num = s2.length();
23 }
24 else {
25 num = s1.length();
26 }
27 //进行数字的相加
28 for (int i = 0; i < num + 1; i++)//此处的num需要+1,避免最后一位计算时仍需要向前进一位
29 {
30 c[i] = c[i] + a[i] + b[i];//需要c[i]是因为在进位的时候需要使用
31 if (c[i] >= 10)//大于十需要向前进一位
32 {
33 c[i] %= 10;
34 c[i + 1]++;
35 }
36 }
37 //如果计算后的最高位为0,就不需要输出了,如果不是,需要输出
38 //假如9099+1001,在上面的for循环中在最后一次循环时,需要向前进位
39 //结果为5位,此时最高位就需要单独输出一下
40 if (c[num] != 0)
41 {
42 cout << c[num];
43 }
44 for (int i = num - 1; i >= 0; i--)
45 {
46 cout << c[i];
47 }
48 return 0;
49 }
思路:
特别大的数字进行相加,普通的int难以实现,一般就选择将大数存入数组中,从数字的个位开始,依次相加,超过10就向前进一位,得出最后的结果输出,
特别示例(9099+1001)相加之后成了五位数字,在28行中体现(需要在万位上多加一次,也就是num+1次循环,并且在最后需要判断最高位是否为0,如果是0,表示最后的结果的位数没有增加,不需要额外输出,如果不是0,则表示结果的位数变多,需要将最高位输出