設計乙個演算法,算出 n 階乘有多少個尾隨零。
示例 1: 輸入: 3 輸出: 0 解釋: 3! = 6, 尾數中沒有零。
示例 2: 輸入: 5 輸出: 1 解釋: 5! = 120, 尾數中有 1 個零.
說明: 你演算法的時間複雜度應為 o(log n) 。
題目要求時間複雜度為o(log n),因此不能使用迴圈求出階乘在統計尾數0的個數。
分析可知,乙個數的末尾的0是由10構造出來的(只有當末尾是10時才會產生進製,並在末尾留下乙個0),而10可以分解成2*5,因此求n的階乘中末尾0的個數就是求1~n中2*5的個數;其他任何可以產生0的組合都可以分解成2*5,例如4*5也可以產生乙個末尾的0,而4*5可以分解成2*(2*5);根據上邊兩條可以知道,我們實際要求的是可以產生2*5的對數;普通的5的倍數,只可以產生乙個*5,例如30=5*6,而特殊的25=5*5可以產生兩個*5,125=5*5*5可以產生三個*5;因此,本題可以轉換為求能產生2*5的質因數的個數,例如1*2*3*4*5*6*7*8可以產生乙個2*5,因此8的階乘尾數中含有1個0;又因為,質因數2的個數一定比質因數5的個數多,因此本題可以直接轉換成求質因數5的個數。
class solution
return ret;
}};
C 複習(四) 高次方尾數 階乘尾數
題目四 高次方程的後三位,即輸入x,y,求x的y次方的後三位 題目五 求階乘尾數有多少個零,例如輸入a,a!末尾的零的個數 題目四 求高次方程的後三位,即輸入x,y,求x的y次方的後三位 分析 int型資料範圍是正負21億左右,所以直接求高次方程會突破 取值範圍,因此只需要每次取後三位即可 題目五 ...
階乘尾數零的個數
100 的尾數有多少個零?為了解決這個問題,必須首先從數學上分析在100 結果值的末尾產生零的條件。不難看出 乙個整數若含有乙個因子5,則必然會在求100 時產生乙個零。因此問題轉化為求1到100這100個整數中包含了多少個因子5。程式說明與注釋 include int main printf th...
演算法精練 高次方數的尾數 階乘尾數零的個數
高次方數的尾數 要求 求133的133次方的最後三位數。利用c c 程式進行設計。演算法設計 由於計算機所能表示的整數範圍有限,直接乘的方法顯然是不可能得到正確的結果。但事實上,題目只要求保留後三位,完全沒有必要求出完整結果。因此 通過研究乘法的規律可以發現,乘積的後三位的值只與乘數與被乘數的後三位...