N的階乘末尾有多少個0 51Nod 1003

2021-08-11 18:12:00 字數 910 閱讀 7164

n的階乘後面有多少個0?

6的階乘 = 1*2*3*4*5*6 = 720,720後面有1個0。

input

乙個數n(1 <= n <= 10^9)

output

輸出0的數量

sample input

5sample output

分析:想到這個問題,有人可能第一反應就是現求出n!,然後再根據求出的結果,最後得出n!的末尾有多少個0。但是轉念一想

,會不會溢位,等等。

其實,從"那些數相乘可以得到10"這個角度,問題就變得比較的簡單了。

首先考慮,如果n的階乘為k和10的m次方的乘積,那麼n!末尾就有m的0。如果將n的階乘分解後,那麼

n的階乘可以分解為: 2的x次方,3的y次方,4的5次z方,.....的成績。由於10 = 2 * 5,所以m只能和x和z有關,每一對2和5相乘就可以得到乙個10,於是m = min(x,z),不難看出x大於z,因為被2整除的頻率比被5整除的頻率高的多。所以可以把公式簡化為m=z.

由上面的分析可以看出,只要計算處z的值,就可以得到n!末尾0的個數

方法一:

z = n/5 + n /(5*5) + n/(5*5*5).....知道n/(5的k次方)等於0

公式中 n/5表示不大於n的數中能被5整除的數貢獻乙個5,n/(5*5)表示不大於n的數中能被25整除的數再共享乙個5.......

int fun2(int n)

return num;

}

方法二:

要計算z,最直接的方法就是求出n的階乘的所有因式(1,2,3,...,n)分解中5的指數。然後求和

int fun1(int n)

}return num;

}

N的階乘末尾有多少個0

例如 n 5,n 120.末尾有1個0.分析 想到這個問題,有人可能第一反應就是現求出n 然後再根據求出的結果,最後得出n 的末尾有多少個0。但是轉念一想,會不會溢位,等等。其實,從 那些數相乘可以得到10 這個角度,問題就變得比較的簡單了。首先考慮,如果n的階乘為k和10的m次方的乘積,那麼n 末...

N的階乘末尾有多少個0

chinawanglun 問題 n的階乘 n 中的末尾有多少個0?例如 n 5,n 120.末尾有1個0.分析 想到這個問題,有人可能第一反應就是現求出n 然後再根據求出的結果,最後得出n 的末尾有多少個0。但是轉念一想,會不會溢位,等等。其實,從 那些數相乘可以得到10 這個角度,問題就變得比較的...

N的階乘末尾有多少個零

問題 n的階乘 n 中的末尾有多少個0?例如 n 5,n 120.末尾有1個0.分析 想到這個問題,有人可能第一反應就是現求出n 然後再根據求出的結果,最後得出n 的末尾有多少個0。但是轉念一想,會不會溢位,等等。其實,從 那些數相乘可以得到10 這個角度,問題就變得比較的簡單了。首先考慮,如果n的...