#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int High[101000];
int JC(int n) {
High[0] = 1;
int i, j;
int length = 1;
//乘以各个数
for (i = 2; i <= n; i++) {
//依次计算
for (j = 0; j < length; j++) {
High[j] *= i;
}
//检测进位
for (j = 0; j < length; j++) {
if (High[j] > 9) {
High[j + 1] += High[j] / 10;
High[j] %= 10;
//长度增加需要条件
if (j == length - 1)
length++;
}
}
}
return length;
}
void Scan(int n, int a) {
memset(High, 0, sizeof(int) * (n + 1));
int i;
int cnt = 0;
int len = JC(n);
for (i = 0; i < len; i++) {
if (High[i] == a) {
cnt++;
}
}
cout << cnt << endl;
}
int main() {
ios::sync_with_stdio(false);
int t;
int n, a;
cin >> t;
int i;
for (i = 0; i < t; i++) {
cin >> n >> a;
Scan(n, a);
}
return 0;
}
我的思路是每次输入都计算阶乘,计算之前先把数组清空。算完保存再数组里,然后每次进行扫描计数,但是他全WA