why1481211 @ 2023-07-19 09:29:53
#include<bits/stdc++.h>
using namespace std;
int t,a,n,len;
int ans[3010],jinwei,weishu=3010;
long long total;
bool flag;
int main(){
cin >>t;
while(t--)//多测要清空
{
memset(ans,0,sizeof(ans));
ans[1]=1;
cin >> n >>a;
for(int i=2; i<=n; ++i){
//实现ans[j]*i
weishu=3010;
for(int j=1; j<=weishu; ++j){//因为无法得知得数的位数 开到最大 后面去除0就可以了
if(ans[j]==0) continue;
ans[j]=ans[j]*i;
}
//考虑进位
for(int i=1; i<=weishu+1; ++i){
if(ans[i]>9)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
}
//去除零
while(ans[weishu]==0 && weishu>1) {
weishu--;
}
}
for(int i=weishu; i>=1; --i){//搜索
if(ans[i]==a){
total++;
}
}
cout << total << endl;
}
return 0;
}
by freegt @ 2023-07-20 16:24:15
for(int i=1; i<=weishu+1; ++i){
if(ans[i]>9)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
}
for(int i=weishu; i>=1; --i){//搜索
if(ans[i]==a){
total++;
}
}