zhoujiatao @ 2023-09-25 16:24:27
#include<bits/stdc++.h>
using namespace std;
const int MAX=10000;
long long sum;
int x,y,z;
int main()
{
int i,j,n;
int fac[MAX+1];
memset(fac,0,sizeof(fac));
cin>>x;
for(int k=1;k<=x;k++)
{
cin>>y>>z;
sum=0;
fac[1]=1;
for(i=1;i<=y;i++)
{
for(j=1;j<=MAX;j++)
fac[j]=fac[j]*i;
for(j=1;j<=MAX;j++)
{
fac[j+1]=fac[j+1]+fac[j]/10;
fac[j]=fac[j]%10;
}
}
i=MAX;
while(fac[i]==0)
i--;
for(j=i;j>=1;j--)
if(fac[j]==z)
sum++;
cout<<sum<<endl;
}
cout<<endl;
return 0;
}
样例是过来了(自己做了俩样例也过了),但是是零分,求大神帮助谢谢。
by 编码落寞 @ 2023-09-25 16:31:40
2
5 2
8 0
这组数据你就过不了
by zhoujiatao @ 2023-09-25 16:46:32
@编码落寞 呃...不懂哪里出问题了
by 编码落寞 @ 2023-09-26 10:36:51
@zhoujiatao 应该是多测未清空的问题。 导致第二次操作其他高位有值
by joe_001 @ 2023-10-27 22:04:43
#include<bits/stdc++.h>
using namespace std;
int n,a[100001],len,s,t,z;
int main()
{
cin>>s;
for(int k=1;k<=s;k++)
{
cin>>n;
cin>>t;
memset(a,0,sizeof(a));
a[1]=1;
len=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=len;j++)
a[j]*=i;
for(int j=1;j<=len;j++)
{
a[j+1]+=a[j]/10;
a[j]%=10;
}
if(a[len+1]>0)
len++;
while(a[len]>=10)
{
a[len+1]+=a[len]/10;
a[len]%=10;
len++;
}
}
z=0;
for(int j=1;j<=len;j++)
if(a[j]==t)
z++;
cout<<z<<endl;
}
return 0;
}