第一種方法:
將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次冪均為它本身。...