不要被階乘嚇到

2021-07-02 01:47:18 字數 602 閱讀 6909

1.給定整數n,那麼n的階乘n!末尾有多少個0?

這個問題經過質因子分解轉換為求5的指數

ret = 0;

for(i = 1; i <= n ; i++)

}

[n/k] 等於1,2,3...,n中能被k整除的數的個數

證明:1,2,3...n中能被k整數的數為:

k  k*2 k*3 k*4 k*n  

其中 (k+1)*n > n

k*n <= n

所以能被k整除的數為 [n/k]

ret = 0;

while(n)

2.求n!的二進位制表示中最低位1的位置

這個問題有點繞。

10001000,我們要找到第乙個1,那麼首先判斷最後乙個二進位制是否為0:若為0,則將此二進位制右移一位,即為商值。反之,若為1,則說明這個二進位制是奇數,無法被2整除。

所以這個問題實際上等同於求n!含有質因數2的個數。

int lowestone(int n) 

return ret;

}

不要被階乘嚇到

程式設計之美有一道關於階乘的題目 1給定乙個整數n,那麼n的階乘等於n 末尾有多少個0呢,例如n 10,n 3628800,n 的末尾有兩個0 2求n 的二進位制表示中最低位為1的位置。階乘定義 n return ret 解法二 作者根據 n k 等於1,2,3 n中能被k整除的數的個數規律,得出下...

程式設計之美 不要被階乘嚇到

題目 1 給定乙個整數n,那麼階乘n 末尾有多少個0呢?2 求n 的二進位制表示中最低位1的位置?先來看怎麼計算階乘,當然可以是迴圈,也可以是遞迴,上 public long factorial1 int n return sum public long factorial2 int n retur...

階乘MySQL 程式設計之美 2 2不要被階乘嚇到

題目 1 給定乙個整數n,那麼n的階乘n!末尾有多少個0?例如n 10,n!3628800,末尾有兩個0.2 求n!的二進位制表示中最低位1的位置。問題一 題目解析 這道題如果直接求n!的話也可以,不過萬一溢位了怎麼辦?即使定義longlong型別的也不合適。那 題目 1 給定乙個整數n,那麼n的階...