[AcWing]793. 高精度乘法(C++实现)模板题
1. 题目
2. 读题(需要重点注意的东西)
思路:此处的高精度乘法指高精度×低精度,低精度值该数小于10000。模拟了人工计算乘法的方法。
步骤:
- 数据预处理:输入string a和int b两个数,并将a各个位的数倒置,并存放在vector A中;
- 执行乘法操作mul(A,b):
2.1 首先定义进位t = 0;
2.2 模拟人工乘法,t = A[i] * b + 进位t;
2.3 t%10为结果;
2.4 此外,如果相乘后C为100,输出时为001,与习惯不符,则需要pop出多余的0。 - 输出
3. 解法
---------------------------------------------------解法---------------------------------------------------
#include <iostream>
#include <vector>
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 ++ )
{
if (i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
if(t) C.push_back(t);
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;
}
注意:最后执行完所有乘法操作有,最后的进位也要加到C中,即if(t) C.push_back(t);
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
6. 总结
高精度×低精度模板,推荐完全背下来