前言
分别是一个大整数A和小整数b相乘,两个都是正整数(1<=A的长度<=1000000,1<=b<=10000),大整数乘法也是模拟人去相乘,我先举个例子123 * 12
从上图看来,将b看作一个整体,首先是A的个位乘以b模10就是答案的个位,A的个位乘以b再除以10就是个位的进位,然后 A的十位乘以b加上进位 再模10就是答案的十位,A的十位乘以b加上进位 除以10就是十位的进位...以此类推,直到A没有位数了并且进位,就结束了
将这一过程用代码表示
#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(); i++)
{
C.push_back((A[i] * b + t) % 10);
t = (A[i] * b + t) / 10;
}
// 还有进位
if (t)
C.push_back(t);
return C;
}
int main(void)
{
string a;
vector <int> A;
int b;
cin >> a >> b;
for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
auto C = mul(A, b);
for (int i = C.size() - 1; i >= 0; i--) cout << C[i];
}