A03 高精度乘法
视频链接:A03 高精度算法 乘法_哔哩哔哩_bilibili
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=4001; int a[N],b[N],c[N]; int la,lb,lc; void mul(int a[],int b[],int c[]){ //a*b=c for(int i=1;i<=la;i++) for(int j=1;j<=lb;j++) c[i+j-1]+=a[i]*b[j]; //存乘积 for(int i=1;i<lc;i++){ c[i+1]+=c[i]/10; //存进位 c[i]%=10; //存余数 } while(c[lc]==0&&lc>1) lc--; //去0 } int main(){ char A[N],B[N]; cin>>A>>B; la=strlen(A); lb=strlen(B); lc=la+lb; for(int i=1;i<=la;i++)a[i]=A[la-i]-'0'; for(int i=1;i<=lb;i++)b[i]=B[lb-i]-'0'; mul(a,b,c); for(int i=lc;i>=1;i--) cout<<c[i]; return 0; }
#include <iostream> using namespace std; const int N=100005; int a[N],b[N],c[N]; int la,lb,lc; void mul(int a[],int b[],int c[]){ //a*b=c for(int i=0; i<la; i++) for(int j=0; j<lb; j++){ c[i+j] += a[i]*b[j]; //存乘积 c[i+j+1] += c[i+j]/10; //存进位 c[i+j] %= 10; //存余数 } while(lc && c[lc]==0) lc--; //去前导0 } int main(){ string sa,sb; cin>>sa>>sb; la=sa.size(); lb=sb.size(); lc=la+lb; for(int i=la-1; ~i; i--) a[la-1-i]=sa[i]-'0'; for(int i=lb-1; ~i; i--) b[lb-1-i]=sb[i]-'0'; mul(a,b,c); for(int i=lc; ~i; i--) cout << c[i]; }
#include <iostream> #include <vector> using namespace std; typedef vector<int> VI; VI A,B; void mul(VI &A, VI &B, VI &C){ for(int i=0; i<A.size(); i++) for(int j=0; j<B.size(); j++){ C[i+j] += A[i]*B[j]; //乘积 C[i+j+1] += C[i+j]/10; //进位 C[i+j] %= 10; //余数 } while(C.size()>1&&!C.back()) C.pop_back();//前导0 } int main(){ string a, b; cin >> a >> b; for(int i=a.size()-1;~i;i--) A.push_back(a[i]-'0'); for(int i=b.size()-1;~i;i--) B.push_back(b[i]-'0'); VI C(A.size()+B.size()); mul(A, B, C); for(int i=C.size()-1; ~i; i --) cout << C[i]; return 0; }