lightoj 1138 (二分)

lightoj 1138

Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu

Description

You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! = 1*2*...*N. For example, 5! = 120, 120 contains one zero on the trail.

Input

Input starts with an integer T (≤ 10000), denoting the number of test cases.

Each case contains an integer Q (1 ≤ Q ≤ 108) in a line.

Output

For each case, print the case number and N. If no solution is found then print 'impossible'.

Sample Input

3

1

2

5

Sample Output

Case 1: 5

Case 2: 10

Case 3: impossible

【題意】有些N!的末尾會是幾個連續的0,找含Q個0的N!的最小N值;

【思路】用二分法,從區間【0, oo(無窮大)】查找,注意判斷N!的末尾有幾個0,。



AC代碼:

#include<cstdio>
#define LL long long
LL sum(LL N)//求N階乘中 末尾連續的0的個數
{
    LL ans = 0;
    while(N)
    {
        ans += N / 5;
        N /= 5;
    }
    return ans;
}
int k = 1;
int main()
{
    int t;
    LL Q;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%lld", &Q);
        LL left = 1, right = 1000000000000;
        LL ans = 0;
        while(right >= left)
        {
            int mid = (left + right) >> 1;
            if(sum(mid) == Q)//相等時 要賦值給ans
            {
                ans = mid;
                right = mid - 1;//找的是最小的ans
            }
            else if(sum(mid) > Q)
                right = mid - 1;
            else
                left = mid + 1;
        }
        printf("Case %d: ", k++);
        if(ans)
            printf("%lld\n", ans);
        else
            printf("impossible\n");
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章