zoukankan      html  css  js  c++  java
  • N!的位数

    1)Description:

    N! (N的阶乘) 是非常大的数,计算公式为:N! = N * (N - 1) * (N - 2) * ... * 2 * 1)。现在需要知道N!有多少(十进制)位。

    input:每行输入1个正整数N。0 < N < 1000000

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

    input:32000  1000000

    output:130271 5565709

    2)算法分析:

                 对于任意一个给定的正整数a, 假设10^(x-1)<=a<10^x,那么显然a的位数为x位,又因为log10(10^(x-1))<=log10(a)<(log10(10^x)) 即x-1<=log10(a)<x 则(int)log10(a)=x-1, 即(int)log10(a)+1=x 即a的位数是(int)log10(a)+1,我们知道了一个正整数a的位数等于(int)log10(a) + 1,现在来求n的阶乘的位数:假设A=n!=1*2*3*......*n,那么我们要求的就是(int)log10(A)+1,而log10(A)=log10(1*2*3*......n)  (根据log10(a*b) = log10(a) + log10(b)有)=log10(1)+log10(2)+log10(3)+......+log10(n)所以n的阶乘的位数等于(int)(log10(1)+log10(2)+log10(3)+......+log10(n)) + 1
    3)源代码:
    #include<stdio.h>
    #include<math.h>
    int main()
    {

       int n,i;
       double a;
       while(scanf("%d",&n)!=EOF)
      {
      a=0;
      for(i=1;i<=n;i++)
      {
      a=a+(log10(i));
      }
      printf("%d ",(int)a+1);
    }
    }

  • 相关阅读:
    git push错误
    mysql远程连接
    元组
    kmp算法的理解
    java 环境配置
    那些年认识AS时初见的傻坑坑
    Android 四个对话框区别(Toast、Dialog、Actionbar 和 Snackbar)
    AS 根目录结构说明
    Android Studio的页面注解
    tools的作用
  • 原文地址:https://www.cnblogs.com/weiliuyby/p/5831991.html
Copyright © 2011-2022 走看看