此处讲的是高精度 乘 低精度
// 每次用大的数的一位 乘以 小的数,将所得的数%10 填到数组C中,然后/10作为这一次的进位
//比如 149 * 12
// 先用 9 * 12 得到 108 108 % 10 = 8 填到C中 , 此时 C 为 8, 108 / 10 = 10 ;
// 再用 4 * 12 得到 48 同时加上 上一位的进位 10 得到 58, 58 % 10 = 8 填到C中 此时 C为 88,进位为 5;
// 最后用 1 * 12 得到 12 同时加上 上一位的进位 5 得到 17, 17 % 10 = 7 填到C中,此时C为887,进位为 1;
// 此时A中的每一位都已乘完 ,但是进位不为零,需要将进位填到C中,此时C为8871;
// 最后倒序输出就可以了;
代码如下
#include <iostream>
#include <vector>
using namespace std;
vector<int> A;
vector<int> mul(vector<int> A, int b)
{
vector<int> C;
int t = 0;
for(int i = 0; i < A.size() || t; i ++)// 这里将 最后判断 t 最后是否为0 相结合
{
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(); //去掉前导零 比如 000 将其变成 0
return C;
}
int main()
{
string a;//用字符串读入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];//倒序输出
cout << endl;
return 0;
}