大数运算(6)——大数阶乘(求位数)
生活随笔
收集整理的這篇文章主要介紹了
大数运算(6)——大数阶乘(求位数)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
對于求一個(gè)大數(shù)的階乘的位數(shù)一般有兩種方法:
第一種:
lg(N!)=[lg(N*(N-1)*(N-2)*......*3*2*1)]+1
? ? ? ? ?=[lgN+lg(N-1)+lg(N-2)+......+lg3+lg2+lg1]+1
用C語言實(shí)現(xiàn):
#include<stdio.h> #include<math.h> int main() { int n; double sum=0; scanf("%d",&n); for(int i=1;i<=n;i++) { sum=sum+log10(i); } printf("%d\n",(int)sum+1); return 0; }第二種:
用Stirling公式計(jì)算n!結(jié)果的位數(shù)時(shí),可以兩邊取對數(shù),
得: log10(n!) = log10(2*PI*n)/2+n*log10(n/E);?
故n!的位數(shù)= log10(2*PI*n)/2+n*log10(n/E)+1(注意:當(dāng)n=1時(shí),算得的結(jié)果為0)
總結(jié)
以上是生活随笔為你收集整理的大数运算(6)——大数阶乘(求位数)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数运算(5)——大数除法(取模、取余)
- 下一篇: C语言构建一个链表以及操作链表