chenkuo @ 2022-06-30 14:46:03
大佬们,我的代码再一次出bug了,可以帮我看看吗,谢谢
#include<bits/stdc++.h>
using namespace std;
int n,a[10000][10000],s[10000],c[10000],q;
int main(){
cin>>n;
a[1][1]=1;
s[1]=1;
c[1]=1;
q=1;
for(int i=2;i<=n;i++){
c[i]=c[i-1];
for(int j=1;j<=c[i];j++){
a[i][j]=a[i-1][j]*i;
}
for(int j=1;j<c[i];j++){
if(a[i][j]>9) a[i][j+1]=a[i][j]/10,a[i][j]%=10;
}
if(a[i][c[i]]>9) a[i][c[i]]-=10,a[i][++c[i]]=1;
for(int j=1;j<=q;j++){
s[j]+=a[i][j];
}
for(int j=1;j<q;j++){
if(s[j]>=10) s[j+1]++,s[j]-=10;
}
if(s[q]>=10) s[q]-=10,s[++q]=1;
}
for(int i=q;i>=1;i--){
cout<<s[i];
}
}
可以的话帮我看看这个
by Happy_Orca @ 2022-06-30 15:04:51
把S数组去掉,再把第三个循环里
a[i][j+1]=a[i][j]/10
改成
a[i][j+1]+=a[i][j]
把
if(a[i][c[i]]>9) a[i][c[i]]-=10,a[i][++c[i]]=1;
改成
if(a[i][c[i]]>9) a[i][++c[i]]+=a[i][c[i]]/10,a[i][c[i]]%=10;
最后直接输出a[n]
by Happy_Orca @ 2022-06-30 15:06:52
c数组也不要了,直接一个q跟全场
by Happy_Orca @ 2022-06-30 15:07:09
@chenkuochenkuo
by chenkuo @ 2022-06-30 15:07:34
@fo_ol 大佬可以解释一下吗
by chenkuo @ 2022-06-30 15:09:05
@fo_ol 我原来为什么错
by chenkuo @ 2022-06-30 15:09:22
谢谢
by Happy_Orca @ 2022-06-30 15:10:12
@chenkuochenkuo 这题不需要这么麻烦。因为 n<=50 所以,完全可以用一个一维数组去乘i,按照乘法规律每次维护一下就行了
by chenkuo @ 2022-06-30 15:11:36
@fo_ol 好的谢谢
by Happy_Orca @ 2022-06-30 15:13:23
@chenkuochenkuo 因为你 a[i] 是继承了上一次的运算结果,然后你用s数组去加 a[i] ,结果肯定是错的,而且你a[i]维护的也不是正确的数值