Iwara @ 2023-09-04 18:40:59
RT
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll base=1e9,MAXN=1e5+5;
ll t;
ll n,a;
ll num[MAXN],len,ans;
int main(){
cin>>t;
while(t--){
cin>>n>>a;
len=1;ans=0;
memset(num,0,sizeof(num));
num[1]=1;
for(ll i=1;i<=n;i++){
for(ll j=1;j<=len;j++)num[j]*=i;
for(ll j=1;j<=len;j++)num[j+1]+=num[j]/base,num[j]%=base;
if(num[len+1])len++;
while(num[len]>=base)num[len+1]+=num[len]/base,num[len]%=base,len++;
}
for(ll i=len;i>=1;i--)while(num[i])ans+=(num[i]%10==a),num[i]/=10;
cout<<ans<<endl;
}
return 0;
}
退化到橙题不会写了
by DaShaber @ 2023-09-04 19:05:06
@iwara
中间某一段数字中如果有前导零会被程序忽略,会导致错误。
例如如果阶乘的结果是这个数:
那么红色的 0 不会被统计。