思路
按照上面的式子,我们需要将大数123乘以小数12
- 定义进位t=0
- 将大数的第一位乘以小数,并加上进位t,得到新t,即
t+=A[i]*b;
- 将t最低位插入到C中
- 将t对10取余,可以看作目前t的权重变大了,即表示向上进位
- 最高位进位
- 去掉前导零
#include<iostream>
#include<vector>
using namespace std;
vector<int> mul(vector<int> &A, int b) // C = A * b, A >= 0, b >= 0
{
int t=0;//进位
vector<int> C;
for(int i=0;i<A.size();i++)
{
t+=A[i]*b;
C.push_back(t%10);
t/=10;
}
//最高位进位
if(t) C.push_back(t);
//去掉前导零
while(C.size()>1&&C.back()==0) C.pop_back();
return C;
}
int main()
{
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--) printf("%d",C[i]);
return 0;
}