高精度乘法

· · 个人记录


#include<bits/stdc++.h>
using namespace std;
const int N=500000;
int a[N],b[N],ans[N];
string s1,s2;
void muilt(){
    int x1=s1.length(),x2=s2.length();
    for(int i=1;i<=x1;i++){
        int tmp=0;
        for(int j=1;j<=x2;j++){
            int all=a[i]*b[j];
            ans[i+j-1]+=all;
        }
    }
    for(int i=1;i<x1+x2;i++){
        int tmp=ans[i];
        ans[i]=tmp%10;
        tmp/=10;
        ans[i+1]+=tmp;
    }
}
int toInt(string s1,string s2){
    for(int i=s1.length()-1;i>=0;i--){
        a[s1.length()-i]=s1[i]-'0';
    }
    for(int i=s2.length()-1;i>=0;i--){
        b[s2.length()-i]=s2[i]-'0'; 
    }
//  for(int i=1;i<=s1.length();i++){
//      cout<<a[i];
//  }
//  cout<<endl;
//  for(int i=1;i<=s2.length();i++){
//      cout<<b[i];
//  }
//  cout<<endl;
    muilt();
}
int main(){
    cin>>s1>>s2;
    toInt(s1,s2);
    int t=4500;
    while(ans[t]==0)t--;
//  cout<<t<<endl;
    for(int i=t;i>=1;i--){
        cout<<ans[i];
    }
}