模板
//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++) {
t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
思路
1、高精度整数A,低精度整数b,进位t
2、本位计算值 = A[i] * b + t
本位结果 = (A[i] * b + t) % 10
进位 t = (A[i] * b + t) / 10
例题
(1)
输入高精度正整数A(以字符串形式),低精度整数b。
求A * b,并输出。
#include <iostream>
#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++) { //A的最高位计算完后若有进位,需追加到C末尾
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;
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--) cout << C[i];
return 0;
}