高精度乘法

高精度乘法实现

在处理大整数运算时,直接使用内置的数据类型可能会导致溢出,因此需要使用字符串或数组来存储大整数,并逐位进行运算。本文将介绍如何使用C++实现高精度乘法。

代码实现

以下是一个实现高精度乘法的完整C++代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>
using namespace std;

vector<int> mul(vector<int> a, int b) {
vector<int> c;
int t = 0;
for (int i = 0; i < a.size(); i++) {
t += a[i] * b;
c.push_back(t % 10);
t = t / 10;
}
while (t) {
c.push_back(t % 10);
t = t / 10;
}
return c;
}

int main() {
string a;
int b;
cin >> a >> b;
vector<int> A;
for (int i = a.size() - 1; i >= 0; i--) {
A.push_back(a[i] - '0');
}
auto C = mul(A, b);
for (int i = C.size() - 1; i >= 0; i--) {
printf("%d", C[i]);
}
return 0;
}

示例输入输出

以下是一些示例输入和对应的输出,帮助理解代码的工作原理。

示例 1

输入:

1
2
12345678901234567890
9

输出:
1
111111110111111110010

示例 2

输入:

1
2
98765432109876543210
8

输出:
1
790123456879012345680

示例 3

输入:

1
2
99999999999999999999
5

输出:
1
499999999999999999995

代码说明

输入处理:

  • 使用字符串 a 存储输入的大整数。
  • 将字符串转换为倒序存储的整数数组 A

乘法实现:

  • 函数 mul 实现大整数与单个整数的逐位乘法,并处理进位。

主函数逻辑:

  • 将字符串转换为整数数组,并进行逐位乘法计算。
  • 逆序输出结果。
作者

Xiongyuqi

发布于

2024-05-30

更新于

2024-06-27

许可协议

评论