N!的位數兩種方法求解

2021-07-12 04:35:53 字數 718 閱讀 7012

第一種方法:

將n!表示成10的次冪,即n!=10^m 則不小於m的最小整數就是 n!的位數,對該式兩邊取對數,有

m =log10^n!

即:m = log10^1+log10^2+log10^3...+log10^n  

迴圈求和,就能算得m值,該m是n!的精確位數

#include#include#include#includeusing namespace std;

int main()

printf("%d\n",(int)d+1);

}return 0;

}

第二種方法:直接套斯特靈公式 res=(long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );

不過需要處理下n=1和n=0的情況。

#include#include#include#include#includeusing namespace std;

int main()

{    long res;

int n;

cin>>n;

if(n<=1)res=1;

else

res=(long)((log10(sqrt(4.0*acos(0.0)*n))+n*(log10(n)-log10(exp(1.0))))+1);

cout<

兩種方法求解逆序對

逆序對定義 對於乙個包含n個非負整數的陣列a 1.n 如果有i j,且a i a j 則稱 a i a j 為陣列a中的乙個逆序對。常見的兩種方法求解逆序對 1.窮舉法 暴力求解 時間複雜度o n 2 2.歸併法,時間複雜度o nlogn 窮舉法 對於乙個給定的序列,依次從左往右取每乙個元素,從該元...

兩種方法求解 約瑟夫環

題目描述 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為0的人開始報數,數到2的那個人出列 他的下乙個人又從0開始報數,數到2的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。解法一 基於陣列實現 public void solution int totalnum,...

兩種方法求x的n次冪

分析 在求乙個數x的n次冪時,可分為偶數和奇數兩種情況來討論,若x為偶數,則x n x n 2 x n 2,若果x為奇數,則x n x n 1 2 x n 1 2 x。它的基準情況 無需遞迴即能解出 很明顯,就是n 0和n 1時,n 0時,則任何數的0次冪均為1,n 1時,任何數的1次冪均為它本身。...