高精度A+B
2023-07-25 20:25:03
发布于:河北
模拟列式计算加法,最后删除前置 0。
计算的最终答案是存放在 c 字符串中,两数相加的数位最大是长度最长的数位 + 1。
最后需要将数字转换为 char 类型字符数字,以及删除前置 0。
#include <bits/stdc++.h>
using namespace std;
string addition(string a, string b) {
// 构造一个答案 c 字符串,长度是 a 与 b 最长的,全部初始化为 ASCII 0,方便做加法运算
string c(max(a.length(), b.length()) + 1, 0);
// 将整数长的放在 a 字符串上
if (a.length() < b.length()) a.swap(b);
// i 表示 a 整数的数位,j 表示 b 整数的数位,均从个位开始相加,k 表示 c 整数的数位
for (int i = a.length() - 1, j = b.length() - 1, k = c.length() - 1; i >= 0; i--, j--, k--) {
c[k] += a[i] - '0' + (j >= 0 ? b[j] - '0' : 0);
if (c[k] > 9) { // 需要进位
c[k - 1] = 1;
c[k] -= 10;
}
}
// 将所有的整数转换为字符数字
for (int i = 0; i < c.length(); i++) {
c[i] += '0';
}
// 删除前置 0
while (c.length() > 1 && c.front() == '0') c.erase(c.begin());
return c;
}
int main() {
string a, b;
cin >> a >> b;
cout << addition(a, b);
return 0;
}
这里空空如也
有帮助,赞一个