模拟就好了。\(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