P1591 阶乘数码
题目描述
求 n ! n! n! 中某个数码出现的次数。
输入格式
第一行为 t ( t ≤ 10 ) t(t \leq 10) t(t≤10),表示数据组数。接下来 t t t 行,每行一个正整数 n ( n ≤ 1000 ) n(n \leq 1000) n(n≤1000) 和数码 a a a。
输出格式
对于每组数据,输出一个整数,表示 n ! n! n! 中 a a a 出现的次数。
输入输出样例 #1
输入 #1
2
5 2
7 0
输出 #1
1
2
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
int m;
int n,s;
scanf("%d",&m);
for(int i=1;i<=m;++i)
{
scanf("%d%d",&n,&s);
vector<int>num = {1};
int cnt=0;
if(n==0 ||n==1) num.push_back(1);
else
{
for(int i=2;i<=n;++i)
{
int carry=0;
for(int j=0;j<num.size();++j)
{
int product=num[j]*i+carry;
num[j]=product%10;
carry=product/10;
}
while(carry)
{
num.push_back(carry%10);
carry/=10;
}
}
for(int i=0;i<num.size();++i)
if(num[i]==s) cnt++;
printf("%d\n",cnt);
}
}
return 0;
}