竖式计算,也就是手算怎么算的,来模拟手算。
核心思想:
- 字符串存储,实现无限长整数相加。
- 首先反转数组,也就是跟我们手算时一样,是从后往前计算的。
- 当前位置上的两个字符(已转换整型)相加,再加上携带的进位(默认为0)对10取余数,就是计算的当前位的val。前述的三项和除以10的商就是当前的进位。
- 字符到整型:- ‘0’ ;整型到字符:+ ‘0’ ;
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string addOperatorAnyLen(string str1, string str2){
int len = max(str1.size(), str2.size());
string result;
reverse(str1.begin(), str1.end());
reverse(str2.begin(), str2.end());
int carry = 0;
for (int i = 0; i < len; ++i) {
int str1_i = i < str1.size() ? str1[i] - '0' : 0;
int str2_i = i < str2.size() ? str2[i] - '0' : 0;
int val = (str1_i + str2_i + carry) % 10;
carry = (str1_i + str2_i + carry) / 10;
result.insert(result.begin(), val + '0');
}
if (carry == 1) result.insert(result.begin(), '1');
return result;
}
调用:
int main(){
string a, b;
while (cin >> a >> b){
cout << addOperatorAnyLen(a, b) <<endl;
}
return 0;
}
输入:
999999999
1
输出:
1000000000