vector<int> u; //儲存a倒序的每個數
vector<int> v; //儲存b倒序的每個數
vector<int> add(vector<int> m, vector<int> n) {//高精度加法
vector<int> temp;//temp陣列儲存相加後的每個數
int t=0;//t作為每個數相加的和
for (int i = 0; i < m.size() || i < n.size(); i++) {//遍歷u,v陣列
if (i < m.size()) t += m[i];
if (i < n.size()) t += n[i];
temp.push_back(t % 10);//向temp尾部中塞入每個數相加後的最後一位
t /= 10;//計算進位值存入下一位的計算
}
if (t > 0) {//當最後兩個數相加後仍需要進位
temp.push_back(1);//向temp尾部塞入1
}
return temp;
}
int main() {
string a, b;
cin >> a >> b;
/*例:a=123456,b=123456*/
for (int i = a.size() - 1; i >=0; i--) u.push_back(a[i] - '0');//將字串形式的a,b轉換為int十進位制形式
for (int i = b.size() - 1; i >=0; i--) v.push_back(b[i] - '0');
//從a,b最後一位開始讀取,逐個塞入u,v的尾部
/*例:u=654321,v=654321*/
vector<int> c = add(u, v);
for (int i = c.size() - 1; i >= 0; i--) printf("%d", c[i]);//計算後再次倒序輸出c
/*例:c=219642,輸出246912為最後答案*/
return 0;
}
//模擬豎式計算過程,重點在倒序相加,便於計算機處理
//使用vector動態陣列,節省空間