题目简介;略
本道题有两大主攻方面;1.计算n! 2.求a出现的次数
整体思路:使用一个数组存储n!,使用函数整体计算n!和a出现的次数
整体方程代码如下:
void cal(){
int n,a;
scanf("%d %d",&n,&a);
int lens=1;
memset(c,0,sizeof(c));
c[1]=1;
for(int i=2;i<=n;i++){
int jw=0;
for(int j=1;j<=lens;j++){
c[j]=c[j]*i+jw;
jw=c[j]/10;
c[j]%=10;
}
while(jw>0){
lens++;
c[lens]=jw%10;
jw/=10;
}
}
long long cnt=0;
for(int i=lens;i>=1;i--){
if(c[i]==a){
cnt++;
}
}
printf("%lld\n",cnt);
}
整体完整代码如下:
#include<bits/stdc++.h>
using namespace std;
int c[100000];
void cal(){
int n,a;
scanf("%d %d",&n,&a);
int lens=1;
memset(c,0,sizeof(c));
c[1]=1;
for(int i=2;i<=n;i++){
int jw=0;
for(int j=1;j<=lens;j++){
c[j]=c[j]*i+jw;
jw=c[j]/10;
c[j]%=10;
}
while(jw>0){
lens++;
c[lens]=jw%10;
jw/=10;
}
}
long long cnt=0;
for(int i=lens;i>=1;i--){
if(c[i]==a){
cnt++;
}
}
printf("%lld\n",cnt);
}
int main(){
//freopen("t1.in","r",stdin);
//freopen("t1.out","w",stdout);
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++){
cal();
}
return 0;
}