1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;


int main() {
// 1. 开始程序,输入两个字符串
string str1, str2;
cin >> str1 >> str2;

// 2. 初始化一个数组,并每个元素初始化为0
int a[1000];
for (int i = 0; i < 1000; ++i) a[i] = 0;

// 3. 把str1的每一位从最后开始拿(依次为str[str1.length()-1],str[str1.length()-2],...,str1[0]}),依次累加到a[0],a[1],a[2]...,a[str1.length()-1]
for (int i = 0; i < str1.length(); ++i) {
a[i] += ( str1[str1.length()-i-1] - '0' ); // 把对应位置字符拿出来,然后-'0'则是字符对应的数字
}
// 4. 把str2的每一个从最后开始拿,同3操作。
for (int i = 0; i <str2.length(); ++i) {
a[i] += ( str2[str2.length()-i-1] - '0' );
}

// 5. 从最低位,也就是0下标开始对数组a进行整理(也是就我们加法的时候所谓的进位。)
for (int i = 0; i < 999; ++i) {
int tmp = a[i] / 10; // 拿出除去个位的部分,如:a[i] = 23;则tmp为2,进位操作的时候3保留下来,2,加到高位去。
a[i+1] += tmp; // 进位操作
a[i] %= 10;
}

// 6. 寻找最高位不为零的位置。当所有数字都为0时,high会为-1,则需要将high赋值为0
int high = 999;
while (0 == a[high]) --high;
high = high > 0 ? high : 0; // 不想用if-else来操作。

// 7. 从最高位开始输出
for (int i = high; i >= 0; --i) cout << a[i];
cout << endl;
return 0;
}

Common Lisp代码

1
2
(let ((a (read)) (b (read)))
(format t "~D~%" (+ a b)))