模拟就好了。\(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;
}
原文地址:https://www.cnblogs.com/zzctommy/p/12332472.html
时间: 2024-10-31 22:27:24