高精度 X 低精度
1. 从题目数据中可以看出是一个很大的整数 X 一个比较小的数,所以在存储的时候只需要一个就可以了,在使用乘法的时候,也需要用到进位。
2. t = 计算是把大整数的每一位与小精度的数相乘,求余得到的数字成为新的数字的那一位,剩下的全部进到下一位,并且进位的数字要参与到下一次的运算。
3. 最后要处理一下t,因为进位的原因,t可能会存在一些多余的数字,所以要判断是否进位。
4. 处理前导0,这是为了防止1234 * 0 ,最终结果只需要输出一个0就可以了。
#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 ++ )
{
if(i < A.size()) t += A[i] * b; // t + A[i] * b = 7218
C.push_back(t % 10); // 只取个位 8
t /= 10; // 721 看作 进位
}
// 处理最后剩余的 t
while(t)
{
C.push_back(t % 10);
t /= 10;
}
// 处理前导0
while(C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main()
{
string a;
int b;
vector<int> A;
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];
return 0;
}