对于一个新手 OIer\text{OIer},我们的首题一般都是 A+BA+B
但是我们要严格要求自己,应该采用高级一点的算法去解决同类问题。
高精度就是一个深化版基本运算的例子。

// Author:PanDaoxi
#include <bits/stdc++.h>
#define endl "\n"

using namespace std;
const int INF = 101; 						// 支持 (INF-1) 位的运算

struct bn{ 									// 大数结构体
	string s, absn; 						// s: 输入的数  		absn: 绝对值
	int num[INF], len, absLen;				// num: 逆序存储        len: 输入的数的长度     absLen: 绝对值的长度
	bool neg;                       		// neg: 负数标记

	void inp(){
		cin >> s;
		len = s.size();

		neg = (s[0] == '-');            	// 获取负数标记
		absn = neg ? s.substr(neg) : s; 	// 截取绝对值
		absLen = absn.size();               // 获取绝对值长度

		for(int i=0; i<absLen; i++){        // 只记录绝对值的逆序,和符号无关
			num[i] = absn[absLen-i-1] - '0';
		}
  		return;
	}
} a, b;                                     // 输入的两个数
int c[INF+1];                               // 结果

char cABS(){                                // 字符串长度比较(字典序)
	if(a.absLen > b.absLen || (a.absLen >= b.absLen && a.absn > b.absn)){
		return 'a';
	}
	else if(a.absn == b.absn){
		return '=';
	}
	else{
		return 'b';
	}
}

void add(){                                 // 加法函数 (a+b)
	for(int i=0; i<max(a.len, b.len)+1; i++){
		c[i] += a.num[i] + b.num[i];
		c[i+1] += c[i] / 10;
		c[i] %= 10;
	}
	return;
}

void sub(){                                 // 减法函数 (a-b)
	for(int i=0; i<max(a.len, b.len)+1; i++){
		if(a.num[i] < b.num[i]) c[i+1]--;
		c[i] += 10 - b.num[i] + a.num[i];
		c[i] %= 10;
	}
	return;
}

void work(){
	if(!a.neg && !b.neg){                   // 同号(正)
		add();
	}
	else if(a.neg && b.neg){                // 同号(负)
		cout << "-";
		add();
	}
	else{                                   // 异号
		char c = cABS();
		if(c == '='){                       // a=b,a-b=0
			cout << 0;
			return;
		}

		if(a.neg && !b.neg){                // a负b正
			if(c == 'a'){                   // a的绝对值大于b的绝对值
				cout << "-";
                sub();
			}
			else{                           // a的绝对值小于b的绝对值
				swap(a, b);
				sub();
			}
		}
		else{                               // a正b负
			if(c == 'a'){                   // a的绝对值大于b的绝对值
				sub();
			}
			else{                           // a的绝对值小于b的绝对值
				cout << "-";
				swap(a, b);
				sub();
			}
		}
	}

	int point = 0;                          // 高精度的输出
	for(int i=max(a.len, b.len) + 1; i>=0; i--){
		if(c[i]){
			point = i;
			break;
		}
	}
	for(int i=point; i>=0; i--){
		cout << c[i];
	}
	return;
}

int main(){
	ios :: sync_with_stdio(false);

	a.inp();
	b.inp();
	work();

	return 0;
}