⚡进击_蒟蒻⚡ @ 2019-12-05 08:21:43
#include<bits/stdc++.h>
using namespace std;
int i,j,c[2005],a[2005],b[2005],la,lb,w;
string s1,s2;
int main()
{
cin>>s1;
cin>>s2;
la=s1.size();
lb=s2.size();
for(i=0;i<la;i++) a[la-i]=s1[i]-48;
for(i=0;i<lb;i++) b[lb-i]=s2[i]-48;
for(i=1;i<=la;i++)
for(j=1;j<=lb;j++)
{
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
w=la+lb;
while(c[w]==0&&w>1) w--;
for(i=w; i>=1; i--) cout<<c[i];
return 0;
}
by BeyondHeaven @ 2019-12-05 08:27:20
NTT (逃
by tiger0133 @ 2019-12-05 08:53:45
不应该开到 4005 么
by _StarBird_ @ 2019-12-05 09:40:39
最高位进位进不上去
by _StarBird_ @ 2019-12-05 09:42:23
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
因为如果i+j的最高位>=10的话,i+j+1位也不能加1,因为i+j+1位在循环里没有遍历到
by _StarBird_ @ 2019-12-05 09:43:09
改成
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
应该就好了qwq
by _StarBird_ @ 2019-12-05 09:43:53
虽然还是建议进位与运算分两个循环
这样保险
by 崭新梦魇之殇 @ 2019-12-05 11:23:17
lz头像好评(明日之后)
by ⚡进击_蒟蒻⚡ @ 2019-12-05 14:09:02
@蒋陈和 谢谢大佬
by _StarBird_ @ 2019-12-05 14:48:39
@⚡进击_蒟蒻⚡ 恩
by 柠檬草苏打水 @ 2020-01-30 14:04:29
#include<iostream>
#include<cstring>
using namespace std;
string a,b;
int x[2005],y[2005];
int z[4000005];
int main()
cin>>a>>b;
if((a.length()==1&&a[0]=='0')||(b.length()==1&&b[0]=='0')){
cout<<0;
return 0;
}
for(int i=a.length()-1,j=1;i>=0;i--)
x[j++]=a[i]-'0';
for(int i=b.length()-1,j=1;i>=0;i--)
y[j++]=b[i]-'0';
for(int i=1;i<=a.length();i++){
for(int j=1;j<=b.length();j++){
z[j+i-1]+=x[i]*y[j];
int s=j+i-1;
while(z[s]>=10){
z[s+1]+=z[s]/10;
z[s]%=10;
s++;
}
}
}
int cnt=4000005;
while(!z[cnt]){
cnt--;
}
for(int i=z;i;i--) cout<<z[i];
return 0;
}