假设A和b相乘,A为高精度数。A的每一位和b相乘,求出每次相乘的结果数以及进位数,然后依次放入结果数列中即可,举个例子: C1到C4代表每个位上的结果,t1到t3为进位数。 C1 = (3 x 11) % 10 = 3 t1 = (3 x 11) / 10 = 3 C2 = (2 x 11 + t1) % 10 = 5 t2 = (2 x 11) / 10 = 2 C3 = (1 x 11 + t2) % 10 = 3 t3 = (1 x 11) / 10 = 1 C4 = (0 x 11 + t3) = 1 故,最终答案为C4C3C2C1=1353。
代码
#include<iostream> #include<vector>
usingnamespacestd;
vector<int> mul(vector<int> &A, int b){ vector<int> C; int t = 0;//进位 for (int i = 0; i < A.size() || t; i++) { if (i < A.size()) t+=A[i]*b; C.push_back(t % 10);//把个位取出 t /= 10; } return C; }
intmain(){ string a; int b; cin >> a >> b; //a="123456" vector<int> A; for(int i = a.size()-1;i>=0;i--) A.push_back(a[i] - '0'); auto C = mul(A,b); //auto自动类型推导 for (int i=C.size()-1;i>=0;i--)printf("%d",C[i]); return0; }