#include using namespace std; const int N = 1e5 + 10; // 足够大的静态数组大小 const int WIDTH = 4; // 压位位数 const int BASE = 10000; // 压位基数10^4 int a[N], b[N]; // 静态数组存储 int al, bl; // 有效长度 // 字符串转压位数组(逆序存储) void str2num(string s, int num[], int &sl) { sl = 0; for (int i = s.length() - 1; i >= 0; i -= WIDTH) { int v = 0; int st = max(i - WIDTH + 1, 0); for (int j = st; j <= i; j++) v = v * 10 + (s[j] - '0'); num[sl++] = v; } } // 高精度加法(压位版) void add(int a[], int &al, int b[], int &bl) { // 确保a是较长的数组,如果不是则交换a和b // 确保a是较长的数组,如果不是则交换a和b if (al < bl) swap(a, b), swap(al, bl); int t = 0; for (int i = 0; i < al; i++) { int bv = (i < bl) ? b[i] : 0; t += a[i] + bv; a[i] = t % BASE; t /= BASE; } // 处理最后的进位 if (t) a[al++] = t; } int main() { string x, y; cin >> x >> y; // 转换输入字符串为压位数组 str2num(x, a, al), str2num(y, b, bl); // 执行加法 add(a, al, b, bl); // 输出结果:最高位直接输出,后续位补前导零 printf("%d", a[al - 1]); // 输出最高位(无前导零) for (int i = al - 2; i >= 0; i--) printf("%04d", a[i]); // 其他位保持4位宽度 printf("\n"); return 0; }