N - Trailing Zeroes (III) LightOJ - 1138

N - Trailing Zeroes (III)

 LightOJ - 1138 

二分+找5的个数。找5的个数用了一个很巧妙的方法,先找5的倍数的数,再找25倍数的数,直到0。

二分写的好烂,交了好几遍

 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 #include <map>
 5 #include <set>
 6 #include <algorithm>
 7 #include <fstream>
 8 #include <cstdio>
 9 #include <cmath>
10 #include <stack>
11 #include <queue>
12 using namespace std;
13 const double Pi=3.14159265358979323846;
14 typedef long long ll;
15 const int MAXN=5000+5;
16 const int dx[5]={0,0,0,1,-1};
17 const int dy[5]={1,-1,0,0,0};
18 const int INF = 0x3f3f3f3f;
19 const int NINF = 0xc0c0c0c0;
20 const ll mod=1e9+7;
21 ll q;
22 ll C(ll x)
23 {
24     ll num=0;
25     while(x)
26     {
27         num+=x/5;
28         x=x/5;
29     }
30     return num;
31 }
32 ll dic(ll M)
33 {
34     ll l=0,r=M;
35     while(l<r)
36     {
37         ll mid=(l+r)/2;
38         ll res=C(mid);
39         if(res<q) l=mid+1;
40             else r=mid;            
41     }
42     if(C(l)==q)
43         return l;
44     return 0;
45 }
46 int main()
47 {
48     int t;cin>>t;int cnt=0;
49     while(t--)
50     {
51         cin>>q;ll M=500000000;
52         ll ans=dic(M);
53         if(ans) printf("Case %d: %lld\n",++cnt,ans);
54             else printf("Case %d: impossible\n",++cnt);
55     }
56  } 

 

posted @ 2019-06-09 17:19  Chuhanjing  阅读(117)  评论(0编辑  收藏  举报