题目描述:
在n!的数位中存在多少个正整数m?
题解:
首先n的取值范围是1000肯定爆炸…
必须上高精度
看一看就是高精度 * 单精度的操作了。
AC代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn = 1e6 + 13;
int a[maxn] = {};
int main()
{
int t;
cin >> t;
while(t--){
int n,m,jw = 0,ws = 1;
cin >> n >> m;
for(int i = 1;i <= n;i++) a[i] = 0;
a[1] = 1;
for(int i = 2;i <= n;i++){
jw = 0;
for(int j = 1;j <= ws;j++){
a[j] = a[j] * i + jw;
jw = a[j]/10; //设置进位
a[j] %= 10;
}
while(jw > 0){ //需要进位注意这个地方if是不对的,可以调试一下就会发现当n = 19时jw的值>10,就不能只增加一位数了
a[ws + 1] = jw % 10;
jw /= 10;
ws++;//扩展位数
}
}
int sum = 0;
for(int i = 1;i <= ws;i++) if(a[i] == m) sum++;
cout << sum << endl;
}
return 0;
}