73Hz @ 2019-08-26 21:00:03
#include<stdio.h>
#include<string.h>
int s[3700],s_len=0;
void add(int x)
{
for(int i=0;i<=s_len;i++)
s[i]*=x;
for(int i=0;i<=s_len;i++)
{
if(s[i]>=10)
{
s[i+1]+=s[i]/10;
s[i]%=10;
if(i==s_len)
s_len++;
}
}
}
void find(int x)
{
int total=0;
for(int i=s_len;i>=0;i--)
if(s[i]==x)
total++;
printf("%d\n",total);
}
int main(void)
{
int k,n,num;
scanf("%d",&k);
for(int j=0;j<k;j++)
{
scanf("%d%d",&n,&num);
memset(s,0,sizeof(s));
s[0]=1;
for(int i=2;i<=n;i++)//阶乘
add(i);
find(num);
//printf("len=%d\n",s_len);
}
return 0;
}
by __y__ @ 2020-04-19 13:19:26
因为你把s_len设置成了全局变量,所以类似于先7的阶乘,后5的阶乘,对于你的程序5的阶乘长度还是4位