while(C.size()>1&&C.back()==0) C.pop_back();
的必要性:输入A=123456789,b=0,会造成结果C=000000000,有很多前导0,这个循环能把这些前导0删到只剩1个0.
代码里面t
表示进位的意思,乘法,进位就不是1和0那么简单了,有几十,上百的进位,乘完要加上这些个进位才行!这个高精度乘法似乎只能死记硬背,没有其他什么方法感觉,代码不复杂
#include<iostream>
#include<vector>
#include<string>
using namespace std;
const int N=100086;
vector<int> A,C;
string a;
int b;
void mul(vector<int>& A,int B){
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;
}
while(C.size()>1&&C.back()==0) C.pop_back();
}
int main(){
cin>>a>>b;
for(int i=a.size()-1;i>=0;--i) A.push_back(a[i]-'0');
mul(A,b);
for(int i=C.size()-1;i>=0;--i) cout<<C[i];
cout<<endl;
return 0;
}