Big number

求大整数阶乘的位数:

根据:一个数n的位数等于(int)log10(n)+1;

证明:设 10m-1<=n<10m,那么显然n的位数为m

       log10(10m-1)<=log(n)<log10(10m)

      m-1<=log(n)<m,

      log10(n)<m<log10(n)+1

     那么,m=(int)log10(n)+1

所以,n!的位数:(int) [log10(n*(n-1)*(n-2)*....*1)]+1=int(log10n+log10n-1+....+log101)+1

代码如下:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
   int t,n;
   cin>>t;
   for(int i=0;i<t;i++){
    cin>>n;
    double result=0.0;
    for(int j=1;j<=n;j++){
        result+=log10(j);
    }
    int r=(int)result+1;
    cout<<r<<endl;
   }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zuoyou151/p/9007179.html
今日推荐