P1303 A*B Problem(高精度乘法)

喜欢而已 提交于 2020-02-19 20:20:21

P1303 A*B Problem

模拟就好了。\(c_ {i+j} +=a_i \times b_j\).时间复杂度 \(O(n*m)\)FFT版可以做到 \(O((n+m)\log (n+m)\)

#include<bits/stdc++.h>
using namespace std;
string times(string a,string b)
{
    int aa[15000]={0},bb[15000]={0},ans[30000]={0};
    string str="";
    for(int i=0;i<a.length();i++)
        aa[a.length()-i-1]=a[i]-'0';
    for(int i=0;i<b.length();i++)
        bb[b.length()-i-1]=b[i]-'0';
    for(int i=0;i<a.length();i++)
        for(int j=0;j<b.length();j++)
        {
            ans[i+j]+=aa[i]*bb[j];
            if(ans[i+j]>9)ans[i+j+1]+=ans[i+j]/10,ans[i+j]=ans[i+j]%10;
        }
    int len=a.length()+b.length();
    while(ans[len-1]==0&&len-1>0)len--;
    for(int i=0;i<len;i++)
        str=char(ans[i]+'0')+str;
    return str;
}
int main()
{
    string x,y;
    cin>>x>>y;
    cout<<times(x,y)<<endl;
    return 0;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!