高精度乘法

给定两个非负整数(不含前导 00) A和 B,请你计算 A×B 的值。

输入格式

共两行,第一行包含整数 A,第二行包含整数 B。

输出格式

共一行,包含 A×B 的值。

数据范围

1≤A的长度≤1000001≤的长度≤100000,
0≤B≤100000≤≤10000

输入样例:

1
2
2
3

输出样例:

1
6

大数乘小数的模板。

大数的每一位和小数相乘,将得到的乘积相加。

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
#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++){
t+=a[i]*b;
c.push_back(t%10);
t/=10;
}
while(t){ //注意这里,和高精度加法有区别,高精度加法的进位要么是0要么是1,所以直接加。乘法的进位可能是多位,所以要循环,见下图
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> n;
for(int i=a.size()-1;i>=0;i--) n.push_back(a[i]-'0');
vector<int> c=mul(n,b);
for(int i=c.size()-1;i>=0;i--) cout<<c[i];
return 0;
}

高精度乘法