lintCode 2 計算出n階乘中尾部零的個數

2022-08-24 12:06:09 字數 815 閱讀 7568

描述

樣例  1:

輸入: 11

輸出: 2

樣例解釋:

11! = 39916800, 結尾的0有2個。

樣例 2:

輸入: 5

輸出: 1

樣例解釋:

5! = 120, 結尾的0有1個。

將n!先算出來,再數 零 的個數。

存在問題,不可取,階乘資料過大,會產生溢位,而且複雜度較高。

為什麼要數5和2的個數?

舉例:5*4*3*2*1=120,首先零的個數=零的個數的10相乘。例子中5*2*4*3*1可以看出有1對5*2;同理10.*9*。。。1=5*2*9*。。*5*2*4*3*1。顯然10!有兩個零。

總結:找出每個階乘因子中5的個數2的個數可以不看,因為顯然2的個數永遠多餘5的個數。

於是

1

void count(intn)2

13}14 cout << num<1516 }

有問題,當數值過大時,同樣會出現問題,時間開銷巨大。

之前方法二的演算法,思路是對的,但是由於數值變大後,會造成運算複雜度的增加,比如 for()迴圈和"factor *=5"這是程式崩潰的主要原因。

由此,

1

void count(intn)2

12 cout << num <13 }

ps:假使所有的n都不超過int表示範圍,如果有需要可以另該。

設計乙個演算法,計算出n階乘中尾部零的個數

樣例 1 輸入 11 輸出 2 樣例解釋 11 39916800,結尾的0有2個。樣例 2 輸入 5 輸出 1 樣例解釋 5 120,結尾的0有1個。思想一 碰到這個問題可能首先想到的就是用乙個for迴圈得到n的階乘,然後在算出末尾有幾個零,這種思想只能在n的階乘在資料型別範圍內,才能正確。一旦n的...

尾部的零 設計乙個演算法,計算出n階乘中尾部零的個數

思路 乙個n的階乘未尾有多少個 0 取決於 1 到 n 的各個因子中 2 和 5 的個數,而2的個數是遠遠多於5的個數的,因此求出5的個數即可。題解中給出的求解因子 5 的個數的方法是用 n 不斷除以 5,直到結果為 0,然後把中間得到的結果累加.例如,100 5 20,20 5 4,4 5 0 則...

C 實驗2 計算出標準體重,輸出體重狀態

一 問題及 檔名稱 xyz.cpp 作 者 趙雲 完成日期 2016 年 03 月 22 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 無 程式輸出 計算乙個人的標準體重,輸出體重狀態 問題分析 略 演算法設計 略 三 心得體會 編的過程中感覺還是有好多問題,過程中還改了好多次,但...