AcWing 793. 高精度乘法
原题链接
简单
作者:
咲张熊猫人
,
2021-01-14 22:46:41
,
所有人可见
,
阅读 305
C++ 代码
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
vector<int> mul(vector<int>&A, int b)
{
int t = 0;
vector<int> C;
for(int i = 0; i < A.size() || t; ++i) //注意这里的循环退出条件 i < A.size() || t
{ //即t没处理完,则继续循环处理,故对于A[i]运算前要判断其下标是否合理
if(i < A.size()) t = A[i] * b + t;
C.push_back(t%10); //这里乘法的思路可以从乘法本质去推到,先写成多项式的形式然后自己思考
t/=10;
}
while(C.size() > 1 && C.back() == 0) C.pop_back(); //注意这里的乘法也要注意前导0的问题,若不做这步处理
return C; //则 0 * 111 --> 输出 000
}
int main()
{
string s1;
int b;
cin >> s1 >> b;
vector<int> A;
for(int i = s1.size() - 1; i >= 0 ; --i)
A.push_back(s1[i] - '0');
auto C = mul(A,b);
for(int i = C.size() - 1; i >= 0; --i)
cout << C[i] ;
cout<<endl;
return 0;
}