高精度乘法--速度較快

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>

using namespace std;
const int maxn=4005;
string mul(string str1,string str2);
int main(){
    //freopen("in.txt","r",stdin);
    string a,b;
    cin>>a>>b;
    cout<<mul(a,b)<<endl;
    return 0;
}
string mul(string str1,string str2){
    int len1=str1.size();
    int len2=str2.size();
    string str="";
    int i,j,a[maxn],b[maxn],c[maxn];
    for(i=0;i<len1;i++)a[i]=int(str1[len1-1-i]-'0');//倒序方便進位
    for(i=0;i<len2;i++)b[i]=int(str2[len2-1-i]-'0');
    
    for(i=0;i<len1;i++){
        for(j=0;j<len2;j++){
            c[i+j]+=a[i]*b[j];//用+=否則進位被覆蓋
            c[i+j+1]+=c[i+j]/10;
            c[i+j]=c[i+j]%10;
        }
    }
    int len3=len1+len2;
    while(len3>1&&c[len3-1]==0)len3--;
    for(i=0;i<len3;i++)str=char(c[i]+'0')+str;
    //for(int i=len3-1;i>=0;i--) printf("%d",c[i]);
    return str;
}

發佈了87 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章