程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> N!的位數,N!位數

N!的位數,N!位數

編輯:關於C語言

N!的位數,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\n",(int)a+1);
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved