C++
$\color{#cc33ff}{— > 算法基础课题解}$
思路:
高精度乘法:高精度 * 低精度
$\color{blue}{易懂版}$
#include<iostream>
#include <vector>
using namespace std;
// C = A * b 高精度 * 低精度
vector<int> mul (vector<int> &A, int b){
vector<int>C;
int t = 0; //进位,起始时为0
for (int i = 0; i < A.size() || t; i ++){ //当i还没有循环完或者进位t还没有处理完的时候
if (i < A.size()) t += A[i] * b; //如果A还没有遍历完
C.push_back(t % 10);
t /= 10; //进的位
}
while (C.size() > 1 && C.back() == 0) C.pop_back();//防止 123456 * 0这样的情况
return C;
}
int main(){
string a;
int b;
cin >> a >> b; // a = "123456"
vector<int> A;
for (int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0');//A = [6, 5, 4, 3, 2, 1]
vector<int> C;
C = mul (A, b);
for (int i = C.size() - 1; i >= 0; i --) printf("%d", C[i]);
return 0;
}
$\color{red}{易记版}$
#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 ++){
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();//防止 123456 * 0这样的情况
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;
C = mul (A, b);
for (int i = C.size() - 1; i >= 0; i --) printf("%d", C[i]);
return 0;
}
orz