大家好,我是斯特林,就那个斯大林的粉丝斯特林。什么?让我写a+b?不用高精度她会很伤心的!
那么本蒟蒻就给大家送上一份高精度的题解吧!代码如下:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 大数加法
string add(string a, string b) {
vector<int> a_digits, b_digits;
// 将两个字符串转换为数字数组
for (int i = a.size() - 1; i >= 0; i--) {
a_digits.push_back(a[i] - '0');
}
for (int i = b.size() - 1; i >= 0; i--) {
b_digits.push_back(b[i] - '0');
}
// 手动模拟竖式计算
vector<int> result_digits;
int carry = 0;
int i = 0, j = 0;
while (i < a_digits.size() || j < b_digits.size()) {
int x = (i < a_digits.size()) ? a_digits[i++] : 0;
int y = (j < b_digits.size()) ? b_digits[j++] : 0;
int sum = x + y + carry;
result_digits.push_back(sum % 10);
carry = sum / 10;
}
if (carry != 0) {
result_digits.push_back(carry);
}
// 将结果转换为字符串并反转
string result;
for (int i = result_digits.size() - 1; i >= 0; i--) {
result += to_string(result_digits[i]);
}
return result;
}
int main() {
string a, b;
cin >> a >> b;
cout << add(a, b) << endl;
return 0;
}