(大数处理)阶乘数位

计算出第一个正整数n的阶乘位数大于等于 10000的数是多少,
即求最小的正整数 n满足 n! 的位数大于等于 10000

知识点:某数  m 的位数可以由  log10(n)+1  取得 

#include <cstdio>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
const int inf=0x7fffffff;
const long long mod=1e9+7;
long long n;
long long ans,mx=-inf;

int main()
{    
    double x=0;
    for(int i=1;;i++){
        x+=log10(i);          //log10[n*(n-1)*(n-2)*...*2*1]=log10(n)+log10(n-1)+...+log10(2)+log10(1)   
        if(x>=9999){          //这里之所以不是10000,是因为log10(n!)求得的值是n!的位数减 1 ,我们需要的是n!位数>=10000,即 log10(n!)+1>=10000
            cout<<i;
            break;
        }
    }
    return 0;
}
 

 

posted @ 2020-03-04 16:25  Maxwell·  阅读(235)  评论(0编辑  收藏  举报