題目:
初階:123*……100 求結果末尾有多少個零。
高階: n的階乘末尾有多少個0
**分析:一般類似的題目都會蘊含某種規律或簡便方法的階乘末尾乙個零表示乙個進製,則相當於乘以10而10 是由25所得,在1~100當中,可以產生10的有:0 2 4 5 6 8 結尾的數字,顯然2是確定的,因為4、6、8當中都含有因子2,所以都可看當是2,那麼關鍵在於5的數量了那麼該問題的實質是要求出1~100含有多少個5由特殊推廣到一般的論證過程可得:
1、 每隔5個,會產生乙個0,比如 5, 10 ,15,20.。。
2 、每隔 5×5 個會多產生出乙個0,比如 25,50,75,100
3 、每隔 5×5×5 會多出乙個0,比如125.
所以100!末尾有多少個零為:100/5+100/25=20+4=24那麼1000!末尾有多少個零呢?同理得: 1000/5+1000/25+1000/125=200+40+8=248
到此,問題解決了,但我們在學習過程中應當學會發散思維、舉一反三。
接著,請問n!的末尾有多少個零呢?
其實 也是同理的
n/5+n/25+……
如計算 2009! 的末尾有多少個0:2009/5 = 401
1~2009之間有 401 個數是 5 的倍數(餘數省略).401/5 = 80
1~2009 之間有 80 個數是 25 的倍數.80/5 = 16
1~2009 之間有 16 個數是 125 的倍數. 16/5 = 3
1~2009 之間有 3個數是 625 的倍數. 3/5 = 0
1~2009 之間有 0 個數是 3125 的倍數.
所以, 2009! 的末尾有 401 + 80 + 16 + 3 = 500 個0.
**:int countzero(int n)
return ret;}1
2345
6789
10此題擴充套件:求擴充套件n!的二進位制表示中最低位1中的位置。相當於求質因數的2的個數。
原理是:
假如你把1 × 2 ×3× 4 ×……×n中每乙個因數分解質因數,結果就像:
1 × 2 × 3 × (2 × 2) × 5 × (2 × 3) × 7 × (2 × 2 ×2) ×……
10進製數結尾的每乙個0都表示有乙個因數10存在——任何進製都一樣,對於乙個m進製的數,讓結尾多乙個0就等價於乘以m。
10可以分解為2 × 5——因此只有質數2和5相乘能產生0,別的任何兩個質數相乘都不能產生0,而且2,5相乘只產生乙個0。
所以,分解後的整個因數式中有多少對(2, 5),結果中就有多少個0,而分解的結果中,2的個數顯然是多於5的,因此,有多少個5,就有多少個(2, 5)對。
所以,討論1000的階乘結尾有幾個0的問題,就被轉換成了1到1000所有這些數的質因數分解式有多少個5的問題。
首先拿到這道題肯定不能計算出來然後進行數,只能通過一定的技巧來
參考
public static int trailingzeroes(int n)
return sum;
}
排名比較高的**,思路一樣的。。。。。。。。。。。
class solution
return sum;
}}
階乘後的零
示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零。說明 你演算法的時間複雜度應為 o log n 2.1 思路分析 當1個數乘以10的時候,它的末尾會多乙個零,而10只可分解為2 5,因此要確定乙個整數的末尾有多少零,需要知...
階乘後的零
給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 1.求尾數0的個數,即10,10只能由2 5組成,所以求因子中 2 和 5的個...
LeetCode 階乘後的零
一.題目描述 給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 二.解法 老實說,這道題,博主並沒有做出來,是抄的部落格大神的答...