microchip @ 2021-10-07 09:17:14
自测阶乘写得没问题,该初始化的也初始化了,造了几组数据也过了,但是全WA
#include<bits/stdc++.h>
using namespace std;
int T,n,k,ans;
int num[1000];
int qdl(){
int r;
for(r=999;num[r]==0;r--);
return r;
}
int main()
{
cin>>T;
while(T--){
ans=0;
cin>>n>>k;
memset(num,0,sizeof(num));
num[1]=1;
for(int i=2;i<=n;i++){
int s=qdl();
for(int j=1;j<=s;j++){
num[j]*=i;
num[j]+=num[j-1]/10;
num[j-1]%=10;
}for(int j=s;j<1000;j++){
if(num[j]>9){
num[j+1]+=num[j]/10;
num[j]%=10;
continue;
}break;
}
}int x=qdl();
for(int i=1;i<=x;i++)
if(num[i]==k)ans++;
cout<<ans<<endl;
}
return 0;
}
by DZdz1001 @ 2021-12-01 12:11:04
#include<iostream>
#include<algorithm>
#include<string.h>
#define maxn 100010
using namespace std;
int c[maxn];
int main()
{
int t;
cin>>t;
int n,a;
while(t--)
{
cin>>n>>a;
//数组清空
// memset(c,0,sizeof(c));
c[1]=1;//初始化
int p=1;//记录当前位数
//枚举枚举每一个要乘的单精度
for(int i=2;i<=n;i++)
{
int jw=0;
int j;
//枚举数组c的每一位,模拟乘法过程
for(j=1;j<=p;j++)
{
jw+=c[j]*i;
c[j]=jw%10;
jw/=10;
}
while(jw)//解决多进位
{
c[j]=jw%10;
jw/=10;
j++;
}
p=j-1;
}
//统计次数
int sum=0;
for(int i=p;i>=1;i--)
if(c[i]==a)sum++;
cout<<sum<<endl;
}
return 0;
}