高精度乘法
2023-07-25 20:26:36
发布于:河北
模拟列式乘法。
计算的最终答案是存放在 c 字符串中,c 的长度最长是两个整数数位之和。期间注意乘法进位。
最后需要将数字转换为 char 类型字符数字,以及删除前置 0。
#include <bits/stdc++.h>
using namespace std;
string multiply(string a, string b) {
//构造一个答案 c 字符串,长度是 a 与 b 长度之和,全部初始化为 ASCII 0,方便做乘法运算
string c(a.length() + b.length(), 0);
// 需要先将 a, b 翻转,乘法规律
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
for (int i = 0; i < a.length(); i++) {
for (int j = 0; j < b.length(); j++) {
int k = i + j; // 目标下标
c[k] += (a[i] - '0') * (b[j] - '0'); // 计算乘积
c[k + 1] += c[k] / 10; // 进位
c[k] %= 10; // 本位剩下的数字
}
}
reverse(c.begin(), c.end());
for (int i = 0; i < c.length(); i++) {
c[i] += '0';
}
while (c.length() > 1 && c.front() == '0') c.erase(c.begin());
return c;
}
int main() {
string a, b;
cin >> a >> b;
cout << multiply(a, b);
return 0;
}
这里空空如也
有帮助,赞一个