求N 後面有多少個0

2021-10-02 12:13:20 字數 1222 閱讀 6798

從輸入中讀取乙個數n,求出n!中末尾0的個數。

輸入有若干行。第一行上有乙個整數m,指明接下來的數字的個數。然後是m行,每一行包含乙個確定的正整數n,1<=n<=1000000000。

對輸入行中的每乙個資料n,輸出一行,其內容是n!中末尾0的個數。33

1001024024

25310 = 2*5,求出1-n這些數中能夠分解出多少個2和多少個5,則選取較小的那個數便是階乘末尾0的個數。

很顯然,能分解出5的個數肯定比2少,那麼**如下:

用ans記錄能夠分解出5的個數,i從5開始遍歷,每次遞增5,到n結束。

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

int64_t

sumzero

(int64_t n)

}return ans2;

}int

main()

}return0;

}

1<=n<=1000000000但是n太大了,執行超時。

這樣不行必須優化迴圈,減少時間複雜度。

只看n,n每次整除5,得到的是1-n這些數裡面能夠提供5的個數

然後再次對n除5,得到的是剩下的數中還能再提供5的個數, 直到 n=0

int ans =0;

while

(n)

這樣時間複雜度為o(log5(n))而不是o(n/5).

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

int64_t

sumzero

(int64_t n)

return ans;

}int

main()

}return0;

}

通過這個題,能夠學到一點點程式設計小技巧,計算思維+降低時間複雜度。

n 後面有多少個0

很經典的一道數學題 求n!後面有多少個0。我的思路 從 那些數相乘可以得到10 這個角度,問題就變得比較的簡單了。首先考慮,如果n的階乘為k和10的m次方的乘積,那麼n 末尾就有m的0。如果將n的階乘分解後,那麼 n的階乘可以分解為 2的x次方,3的y次方,4的5次z方,的成績。由於10 2 5,所...

階乘n 的結尾後面有多少個零

leetcode 階乘後的零 思路 我們將 n 進行質因數分解,使它由質數相乘得來,即 n 2x 3 y 5z 7w n 2 x times 3 y times 5 z times 7 w times n 2x 3y 5 z 7w 這樣10只能由2 5 2 times 5 2 5產生,而2的個數要比...

求N!末尾有多少個0

思考 該題實際上是求 2 5 因子對的個數。對於任意乙個階乘,5因子的個數總是小於2因子的個數,僅需考慮n 中5因子的個數 方法 1 將該數用 5 除,得到的商取整數。2 然後再用所得商當被除數除以 5,得到的商取整數。3 持續做到商等於 0 為止。4 過程中的商加總即為階乘的尾數 0 的個數。例 ...