holy @ 2022-12-26 10:06:28
#include<iostream>
#include<stdio.h>//scanf()
#include<cstring>//memset(数组名, 0, sizeof(数组名))
using namespace std;
int m[10000];
int main()
{
int i, j, t;
cin>>t;//将输入t组数据
int c = 0;//保留进位
int sum = 0;//中间值, c, sum在for内初始化会累加
for(int k = 0; k < t; ++k)//这里不要声明i, 会被下面的i干扰
{
memset(m,0,sizeof(m));//对数组m初始化,防止连续输入后累加
int n, a;
scanf("%d %d", &n, &a);//n表示n的阶乘
m[0] = 1;
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓核心代码↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
for(i = 2; i <= n; ++i)
for(j = 0; j < 10000; ++j)
{
sum = c + m[j] * i;
m[j] = sum % 10;//保留个位数
c = sum / 10;//保留进位
}
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑核心代码↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
long long num = 0;//a出现的次数
for(i = 10000; i >=0; --i)
if(m[i] != 0)//数据开始出现
{
for(j = i; j >= 0; --j)
if(m[j] == a)
num++;
break;//从a最后一个数输出到a[0]
}
cout<<num<<endl;
}
return 0;
}
by holy @ 2022-12-26 11:00:56
还以为代码本身有大问题