本文只考虑高精度乘低精度
一、算法介绍
用A[i]表示高精度整数,b表示低精度整数,t = A[i] * b + 上一次的进位
- t % 10位当前位
- t /= 10为一下次的进位
在A遍历完了之后,t可能仍然很大,所以要继续循环,直到t等于0。
二、代码
#include <iostream>
#include <string>
#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 ++ ) // 结束的条件有两个:A遍历完,且t = 0
{
if(i < A.size()) t += A[i] * b; // A没遍历完才执行这一步
C.push_back(t % 10);
t /= 10;
}
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;
}