(二分)Trailing Zeroes (III)
生活随笔
收集整理的這篇文章主要介紹了
(二分)Trailing Zeroes (III)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
n的階乘尾部有q個連續的0,現在給你q,請你算出滿足條件的n,如果有多個n滿足條件,輸出最小的那個即可。
Input
輸入一個T(T <= 10000),表示樣例數量。
每個樣例輸入一個q。(1 <= q <= 100,000,000)
Output
對于每個樣例,輸出滿足條件的最小的n,如果沒有滿足條件的則輸出"impossible"。.
Sample Input
3
1
2
5
分析與解答
這題我知道是二分,就是找不出規律
5:1
10:2
25: 6
125 :25+5+1
n:n/5 +n/25+…+1
輸入一個數m是0的個數,我們讓x取值范圍從l到r,如果找到一個x剛好等于m,那就說明此時找到x他階乘末尾有m個零,以前都是找最值,這回找數,看來二分著實厲害
#include<cstdio> #include<cstring> #include<algorithm> #define Max 100000000 using namespace std; int C(int x) //計算x后面有幾個0 {int ans=0;while(x) {ans+=x/5;x/=5;}return ans; } int main() {int t;int cs=1;scanf("%d",&t);while(t--){int q;scanf("%d",&q);int left=0,right=Max;int mid;while(left<=right){mid=(left+right)/2;if(C(mid)>=q)right=mid-1;else left=mid+1;}if(C(left)==q)printf("Case %d: %d\n",cs++,left);elseprintf("Case %d: impossible\n",cs++);}return 0; }總結
以上是生活随笔為你收集整理的(二分)Trailing Zeroes (III)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux分区后盘符找不到,为什么我的磁
- 下一篇: 如何用php写表单中的年月日,php写的