摘要: 階乘是個很有意思的東西,可能很多朋友看到關于他的計算就怕了,其實沒什么,看完下面兩個問題您應該有低了。
1. 給定一個 N ,求出N!末尾有多少個零,比如 N=10,N!=3628800,N!末尾有兩個零。
2. 求N!的二進制表示中最低為1的位置,比如 11010010, 最低為1的位置為2。
問題一解法:
在上一個 blog 中介紹的子數組乘積最大值的問題中,有朋友考慮到溢出的問題,在這個問題中,我們從那些數相乘能得到10這個命題開始思考。比如N!=K×10m那么N!后面就有m個零。這個問題轉化為將N!進行分解,如N!=2a×3b×5c 很顯然 10=2×5,那么零的個數m=min(a,c), 一個數能夠被2整除的機率比5要大很多因此 m=c,因此轉化為求 c的問題,具體算法如:
閱讀全文