Acwing 793. 高精度乘法(模板)
给定两个正整数A和B,请你计算A * B的值。
输入格式
共两行,第一行包含整数A,第二行包含整数B。
输出格式
共一行,包含A * B的值。
数据范围
1≤A的长度≤100000,
0≤B≤10000
输入样例:
2
3
输出样例:
6
题解
#include <iostream>
#include <algorithm>
using namespace std;
vector<int> a, c;
int b;
string s1, s2;
//乘法函数
//大数 * 非大数
// C = A * b, A >= 0, b > 0
vector<int> mul(vector<int> A, int b){
vector<int> C;
int t = 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(){
cin >> s1 >> b;
for (int i = s1.size() - 1 ; i >= 0 ; i -- ) a.push_back(s1[i] - '0');
c = mul(a, b);
for (int i = c.size() - 1 ; i >= 0 ; i -- ) cout << c[i];
return 0;
}
- 重点:
- 仅限于
C = A * b, A >= 0, b > 0
- 一个倒序读入,一个倒序输出,
b
是单独的正常范围数 for(int i = 0 ; i < A.size() || t ; i ++ ){//这里妙妙妙!!!
这里顾及到了乘完之后还有进位的情况,而且下面有一句if (i < A.size()) t += A[i] * b;
,就是在范围内进行乘法- 别忘了在return之前处理一下前置0!!!