题目描述
给定两个非负整数(不含前导 0) 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
的
长
度
≤
100000
,
1≤A的长度≤100000,
1≤A的长度≤100000,
0
≤
B
≤
10000
0≤B≤10000
0≤B≤10000
输入样例:
78995364
89008978996
输出样例:
7031296695057374544
大数 * 小数
C++ 代码
#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() || 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;
vector<int> A, C;
cin >> a >> b;
for(int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0');
C = mul(A, b);
for(int i = C.size() - 1; i >= 0; i --) cout << C[i];
return 0;
}
大数 * 大数
C++ 代码
#include <iostream>
#include <vector>
using namespace std;
vector<int> mul(vector<int>& A, vector<int>& B){
vector<int> C(A.size()+B.size(),0);
int t = 0;
for(int i = 0; i < B.size(); i ++){
int k = 0;
for(int j = 0; j < A.size() || t; j ++){
if(j < A.size()) {
t += (A[j] * B[i] + C[i+j]);
C[i+j]=t % 10;
t /= 10;
k = i + j;
}
else {
k++;
C[k] = t;
t = 0;
}
}
}
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main(){
string a,b;
vector<int> A, B, C;
cin >> a >> b;
for(int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0');
for(int i = b.size() - 1; i >= 0; i --) B.push_back(b[i] - '0');
C = mul(A, B);
for(int i = C.size()-1; i >= 0; i --) cout << C[i];
return 0;
}
原博文链接
AcWing 792. c++ 实现高精度减法
AcWing 793. c++ 实现高精度乘法:大数 * 大数 与 大数 * 小数
AcWing 794. c++ 实现高精度除法