題目連結:http://acm.hust.edu.cn/vjudge/contest/view.action?
cid=84658#problem/A
解析:
/*
對於一個數n,求出它的末尾有幾個0,僅僅需看n之內的數的質因子5的個數,由於2的個數遠多於5。
所以可知道一個數末尾0的個數
Q = n/5 + n/(5^2) + n/(5^3) + …
而題目給出的是Q,要求出的是N,由於是要求出最小的自然數,所以N必然是5的倍數。這點不多做解釋。
依據等比數列的求和公式。有
Q = N*(5^k - 1) / [4*(5^k)]。由此得
N = 4*Q * [(5^k)/(5^k-1)]
注意到 1 < (5^k)/(5^k-1) <= 5/4,且當k->無窮時。(5^k)/(5^k-1)->1,所以可先算出N=4Q的末尾零的個數與所給的Q比較。顯然所求的數就在4Q的附近,所以不須要二分查詢。
*/
#include <iostream>
#include <cstdio>
using namespace std;
int get(int m)
{
int sum=0;
while(m)
{
sum+=m/5;
m/=5;
}
return sum;
}
int main()
{
int m;
while(~scanf("%d",&m))
{
if(m == 0)//注意0的時候是輸出1,不是0,儘管0是自然數
{
puts("1");
continue;
}
int s=4*m/5*5;
while(get(s) < m)
{
s+=5;
}
if(get(s) == m)
printf("%d\n",s);
else
puts("No solution");
}
return 0;
}