题解:AcWing 793 高精度乘法
【题目来源】
AcWing:793. 高精度乘法 - AcWing题库
【题目描述】
给定两个非负整数(不含前导 \(0\))\(A\) 和 \(B\),请你计算 \(A\times B\) 的值。
【输入】
共两行,第一行包含整数 \(A\),第二行包含整数 \(B\)。
【输出】
共一行,包含 \(A\times B\) 的值。
【输入样例】
2
3
【输出样例】
6
【解题思路】

【算法标签】
《AcWing 793 高精度乘法》 #高精度#
【代码详解】
#include <bits/stdc++.h>
using namespace std;
// 大整数乘以小整数的函数
vector<int> mul(vector<int> &A, int b) {
vector<int> C; // 存储结果
int t = 0; // 进位值,初始为0
// 遍历大整数的每一位
for (int i = 0; i < A.size() || t; i++) {
// 如果当前位存在,则计算乘积并加上进位
if (i < A.size()) t += A[i] * b;
// 存储当前位的计算结果
C.push_back(t % 10);
// 计算新的进位
t /= 10;
}
// 去除前导零(保留至少一位)
while (C.size() > 1 && C.back() == 0)
C.pop_back();
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;
}
【运行结果】
2
3
6
浙公网安备 33010602011771号