zoukankan      html  css  js  c++  java
  • 南阳--69(数的长度)

    数的长度

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:1
     
    描述

        N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)?

     
    输入
    首行输入n,表示有多少组测试数据(n<10)
    随后n行每行输入一组测试数据 N( 0 < N < 1000000 )
    输出
    对于每个数N,输出N!的(十进制)位数。
    样例输入
    3
    1
    3
    32000
    样例输出
    1
    1
    130271
    
    来源
    ACM教程
    上传者
    rooot
    //斯特林公式:(long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );(耗时少)
    推导→n!的位数为[lg(n*(n-1)*(n-2)*…..*1)]+1=[lg(n)+lg(n-1)+lg(n-2)   +….+lg(1)]+1 (耗时多)
     1 #include <stdio.h>
     2 #include <math.h>
     3 int main()
     4 {
     5     int n, i, t ; 
     6     double d ;
     7     scanf("%d", &t) ;
     8     while(t--)
     9     {
    10         scanf("%d", &n) ;
    11         d = 0.0 ;
    12         for(i=1; i<=n; i++)
    13         d+=log10(i)    ;
    14         printf("%d
    ", (int)d+1) ;
    15     } 
    16     return 0 ;
    17 }
  • 相关阅读:
    HDU 1097
    HDU 1045
    HDU 1039 -Easier Done Than Said?
    HDU 1038
    HDU 1037 - Keep on Truckin'
    HDU 1036 - Average is not Fast Enough!
    hdu 1701 ACMer
    hdu 1711 Number Sequence(kmp)
    hdu 2087 剪花布条
    字符串匹配-KMP算法学习笔记
  • 原文地址:https://www.cnblogs.com/soTired/p/4634354.html
Copyright © 2011-2022 走看看