高精度计算(乘)
引言
此篇是专栏信息学杂谈第八篇高精度计算(乘),展示了关于C++如何实现高精度乘法的代码
正文:
- 乘法进位
c[i + j - 1] += a[i] * b[j] + x; //x为之前进位
x = c[i + j - 1] / 10;
c[i + j - 1] %= 10;
完整代码:
#include <iostream>
using namespace std;
int main() {ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);//快读string s1, s2, str;int a[10000], b[10000], c[100001];cin >> s1 >> s2;int len1 = (int) s1.length(), len2 = (int) s2.length();if (len1 < len2) {swap(s1, s2);// 交换swap(len1, len2);}// 反向存储for (int i = 1; i <= len1; i++) {a[i] = s1[len1 - i] - '0';}for (int i = 1; i <= len2; i++) {b[i] = s2[len2 - i] - '0';}// 计算int x = 0;for (int i = 1; i <= len1; i++) {for (int j = 1; j <= len2; j++) {c[i + j - 1] += a[i] * b[j] + x; //x为之前进位x = c[i + j - 1] / 10;c[i + j - 1] %= 10;}}c[len1 + len2] = x; //最高位特判// 删除前导0int len = len1 + len2;while (c[len] == 0 && len > 0) {len--;}//反向存储for (int i = len; i > 0; i--) {str += to_string(c[i]);}cout << str;//输出return 0;
}
水文完结!
Tip:为了获得更深入的学习体验,请参考相关教程或书籍,了解C++语言的更多基本结构和基本语法。
每篇图片分享
图片来自inscode上的开源程序
濒危动物:三指树獭