关于高精度大数的计算,我之前写过一篇笔记(ACWING 大神的思想模板),可以参考一下高精度
class Solution {
public:
string solve(string s, string t) {
// write code here
// 为了进位相加的方便 我们将这两个“数”倒着存储
vector A, B;
int lenS = s.size() - 1;
int lenT = t.size() - 1;
// 123456
// 将数字倒着存储
for (int i = lenS; i >= 0; --i) A.push_back(s[i] - '0');
for (int i = lenT; i >= 0; --i) B.push_back(t[i] - '0');
// 6 5 4 3 2 1
vector C; // 最终的结果
int tm = 0; // 初始化进位为0 t = t + Ai + Bi
// 从最低位开始相加
for (int i = 0; i < A.size() || i < B.size(); ++i) {
// 若 A 还没有走完,就加上它
if (i < A.size()) tm += A[i];
// 同理
if (i < B.size()) tm += B[i];
// 把当前的 t 取模后的值插入c
C.push_back(tm % 10);
tm /= 10; //是否有进位,未下一轮准备
}
// 若还有进位就为结果插入进位1
if (tm) C.push_back(1); // C 也是低位在前 6 5 4 3 2 1.。。。
int lenC = C.size();
reverse(C.begin(), C.end());
string str1;
for (int i = 0; i < lenC; ++i) {
str1.push_back(C[i] + '0');
}
return str1;
}
};
值得说明一下,若是Python解决这个问题的话,直接用int()函数转换字符串在相加就可以了,不会越界的,因为对于Python来说它的int的范围跟所在机器的系统有关,理论上长度无限(只有内存跟得上),但是C++就不行;所以我们还是好好理解一下高精度算法吧!☺



