高精度乘法
给定两个正整数 A A A 和 B B B,请你计算 A × B A × B A×B的值。
输入格式
共两行,第一行包含整数
A
A
A,第二行包含整数
B
B
B。
输出格式
共一行,包含
A
×
B
A × B
A×B的值。
数据范围
1
≤
A
1≤A
1≤A 的长度
≤
100000
≤100000
≤100000
0
≤
B
≤
10000
0≤B≤10000
0≤B≤10000
输入样例:
2
3
输出样例:
6
其中计算步骤为:
C
0
=
(
3
∗
12
)
C_0=(3*12)
C0=(3∗12) %
10
=
6
10=6
10=6
t
1
=
(
3
∗
12
)
/
10
=
3
t_1=(3*12)/10=3
t1=(3∗12)/10=3
C
1
=
(
2
∗
12
+
t
1
)
C_1=(2*12+t_1)
C1=(2∗12+t1) %
10
=
7
10=7
10=7
t
2
=
(
2
∗
12
+
t
1
)
/
10
=
2
t_2=(2*12+t_1)/10=2
t2=(2∗12+t1)/10=2
C
2
=
(
1
∗
12
+
t
2
)
C_2=(1*12+t_2)
C2=(1∗12+t2)%
10
=
4
10=4
10=4
t
3
=
(
1
∗
12
+
t
2
)
/
10
=
1
t_3=(1*12+t_2)/10=1
t3=(1∗12+t2)/10=1
C
3
=
t
3
=
1
C_3=t_3=1
C3=t3=1
结果为:
1476
1476
1476
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
using namespace std;
//C = A * b;高精度整数×低精度整数
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;
}
//删除前导0的情况
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');
vector<int> C = mul(A, b);
for(int i = C.size() - 1;i >= 0;i--)
printf("%d", C[i]);
return 0;
}