计算出第一个正整数的阶乘位数大于等于 s=1000010000 的数是多少,
即求最小的正整数 n 满足 n!的位数大于等于 s=1000010000。
地址:https://nanti.jisuanke.com/t/A2221 答案:3249
思路一:计算Sum=n!,将Sum控制在INF=1e10范围内,计算每次去掉的10的个数
思路二:log10(n!)>=s
log10(1)+log10(2)+log10(3)+...+log10(n)>=s;
Code:
/*
计算出第一个正整数的阶乘位数大于等于 s=1000010000 的数是多少,
即求最小的正整数 n 满足 n!的位数大于等于 s=1000010000。
思路一:计算Sum=n!,将Sum控制在INF=1e10范围内,计算每次去掉的10的个数
思路二:log10(n!)>=s
log10(1)+log10(2)+log10(3)+...+log10(n)>=s;
*/
#include<iostream>
#include<cmath>
using namespace std;
typedef long long LL;
int main()
{
ios::sync_with_stdio(false);
const LL INF=1e10;
int ans=1,s=0;
LL Sum=1;
while(1){
Sum*=ans;
while(Sum>=INF){
Sum/=10;
++s;
}
if(s+10>=10000) break;
++ans;
}
cout<<ans<<endl;
/* 思路二
double x = 0;
for (int i = 1;; i++) {
x += log10(i);
if (x >= 9999) {
cout << "## "<<i << endl;
break;
}
}
*/
return 0;
}