AcWing 793. 高精度乘法
原题链接
简单
作者:
王烽
,
2022-09-23 21:46:30
,
所有人可见
,
阅读 143
乘法进位的操作
b乘以A的第二位时,b乘以A的第一位的答案t的个位已经不能改变他,所以去除t的个位
为什么会产生前导0
当高位乘以0时就会产生前导0
C++ 代码(WA)
#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++){
t+=A[i];
t*=b;
C.push_back(t%10);
t/=10;
}
if(t)C.push_back(t);
return C;
}
int main(){
string a;
int b;
cin>>a>>b;
vector<int> A;
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;
}
//WA的原因54-55对于乘法的错误处理以及忘记考虑前导0
C++ 代码
#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++){
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;
int b;
cin>>a>>b;
vector<int> A;
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;
}