定義f(n)為n!的末尾零的個數,例如f(4)=0,f(5)=1。你的任務是對於乙個給定的的值x找出最小的n滿足f(n)=x。
多組測試資料,每組測試資料報含乙個正整數x(1<=x<=10^8)。
對於每組測試資料輸出對應的n,若沒有n滿足則輸出「no solution」。
emmmmmmm,這題我沒有思路,我以為是暴力,但是不大行,以下思路是我複製的別人的。
此題的話一開始點進去以為是讓你算x階乘0的個數沒想到這道題是反著來的了,按照我的理解它給你0的個數叫你輸出最小的數階乘為它所給的數,我之前直接暴搜for迴圈開始。超時了...不過之後有了大佬的二分查詢法,在乙個小的範圍和乙個很大的範圍中,時間複雜度降了很多,所以ac了,但有個問題要注意的是我們要求得是最小的數,比如說0的個數為2,用二分查詢出來的如果不經過處理那就是13,但其實應該是10,那麼我們應該怎麼處理呢?其實我們不難發現,那個最小的數一定是5的倍數,不信大家可以自己列一列。然後呢,其實階乘後面0的個數就是看他有多少個5,比如200,總共有[200/5]+[200/5/5]+[200/5/5/5].,為什麼這麼說呢,200/5是5的倍數有多少個,但是25中有兩個5所以我們要加上25的倍數的,125中有三個5所以我們要加上125倍數個,大家可能會想25中不是有2個5嗎,為什麼只加1個?那是因為你之前算5的倍數的時候就已經算上乙個了,所以這裡只用加1個。
別人的碼子我做了注釋:
#include
long long find(long long x)
return ans;
}int main()
printf("no solution\n");//沒有這樣的m輸出no
out:;}}
階乘後的零
示例 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的個...
階乘尾數零的個數
100 的尾數有多少個零?為了解決這個問題,必須首先從數學上分析在100 結果值的末尾產生零的條件。不難看出 乙個整數若含有乙個因子5,則必然會在求100 時產生乙個零。因此問題轉化為求1到100這100個整數中包含了多少個因子5。程式說明與注釋 include int main printf th...