首页 > 代码库 > 计算一个大数n的阶乘的位数宽度(十进制)(log i累加法 )

计算一个大数n的阶乘的位数宽度(十进制)(log i累加法 )

输入:

      每行输入1个正整数n, (0<n<1000 000)

输出:

      对于每个n,输出n!的(十进制)位数。

 

分析:

      这道题采用蛮力法。根据定义,直接求解!

    所谓n!的十进制位数,就是 log(n)+1, 根据数学公式有:n!=1*2*3*.....*n;

                                                                            lg(n!)=lg(2)+......lg(n);

  代码:

        

//输入一个数字n,请你计算该数的阶乘的十进制数的位数宽度//比如:3!=6, 则宽度为1//样例数据://n=3  输出1//n=32000  输出130271//n=1000000  输出5565709#include <string>#include <iostream>#include <iomanip>#include <stdio.h>#include <cmath>using namespace std;int main(){    long int n;    long int i;    double sum;    while(scanf("%ld", &n)!=EOF)    {        sum=0.0;        for(i=2; i<=n; i++)        {            sum+=log10(i);        }        printf("%ld\n", (int)sum+1 );    }    return 0;}

 

计算一个大数n的阶乘的位数宽度(十进制)(log i累加法 )