一、高精度加法

注:所有代码均为远古代码。

//顶级垃圾程序
//A very bad program
#include <bits/stdc++.h>
using namespace std;
#define maxsize 1000

char ac1[maxsize + 1], ac2[maxsize + 1];
int an1[maxsize + 1], an2[maxsize + 1], asn[maxsize + 1];
int main() {
	//define
	memset(ac1, 0, sizeof(ac1));
	memset(ac2, 0, sizeof(ac2));
	memset(an1, 0, sizeof(an1));
	memset(an2, 0, sizeof(an2));
	memset(asn, 0, sizeof(asn));
	//input
	cin >> ac1;
	cin >> ac2;
	//process
	//处理加数为0的情况 
	if (ac1[0] == '0' && ac2[0] == '0') {
		cout << '0' << endl;
	} else if (ac1[0] == '0') {
		cout << ac2 << endl;
	} else if (ac2[0] == '0') {
		cout << ac1 << endl;
	} else {
		//计算输入字符的有效长度 
		int lenaddchar1 = strlen(ac1);
		int lenaddchar2 = strlen(ac2);
		//倒序转入整形数组,以便于进位 
		for (int i = 0; i < lenaddchar1; ++i) {
			an1[lenaddchar1 - i - 1] = int(ac1[i] - '0');
		}
		for (int i = 0; i < lenaddchar2; ++i) {
			an2[lenaddchar2 - i - 1] = int (ac2[i]-'0');
		}
		//取得输入字符串的最大长度 
		int lenmax = max(lenaddchar1,lenaddchar2);
		//按位相加 
		for(int i = 0; i < lenmax; ++i){
			//和的逐位相加不要忘,累加前面的进位 
			asn[i] += an1[i] + an2[i];
			//进位计算 
			if(asn[i] >= 10){
				asn[i + 1]++; //加法最多进一位 
				asn[i] -= 10;
			}
		}
		//若没有进位,删除前导多余的0 
		//有效的数字区间[0, lenmax - 1], asn[lenmax]是最高位的进位数字 
		if(asn[lenmax] == 0){
			lenmax--;
		}
		//output
		//倒序输出和的值 
		for(int i = lenmax; i >= 0; i--){
			cout << asn[i];
		}
	}
	return 0;
}