POJ2661 HDU1141 ZOJ2545 UVA10916 Factstone Benchmark【Ad Hoc】

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 4769   Accepted: 2263

Description

Amtel has announced that it will release a 128-bit computer chip by 2010, a 256-bit computer by 2020, and so on, continuing its strategy of doubling the word-size every ten years. (Amtel released a 64-bit computer in 2000, a 32-bit computer in 1990, a 16-bit computer in 1980, an 8-bit computer in 1970, and a 4-bit computer, its first, in 1960.)  
Amtel will use a new benchmark - the Factstone - to advertise the vastly improved capacity of its new chips. The Factstone rating is defined to be the largest integer n such that n! can be represented as an unsigned integer in a computer word.  
Given a year 1960 <= y <= 2160, what will be the Factstone rating of Amtel's most recently released chip?

Input

There are several test cases. For each test case, there is one line of input containing y. A line containing 0 follows the last test case.

Output

For each test case, output a line giving the Factstone rating.

Sample Input

1960
1981
0

Sample Output

3
8

Source


问题链接POJ2661 HDU1141 ZOJ2545 UVA10916 Factstone Benchmark

问题简述:(略)

问题分析

  1960年,字长是4位,每10年翻一番,即y年的字长为k=pow(2,(y-1960)/10),而k位的无符号整数是pow(2,k)-1。n!要小于等于pow(2,k)-1。需要注意溢出和超时,故采用对数运算。对于n!<=pow(2,k)-1的两边取对数,long2(n!)=log(1)+log2(n-1)+...+log2(n)<k。

程序说明:(略)

题记:(略)

参考链接:(略)


AC的C++语言程序如下:

/* POJ2661 HDU1141 ZOJ2545 UVA10916 Factstone Benchmark */

#include <iostream>
#include <stdio.h>
#include <math.h>

using namespace std;

int main()
{
    int y;
    while(~scanf("%d", &y) && y) {
        double k = pow(2, (y - 1960) / 10 + 2);
        double sum = 0;
        int cnt = 1;
        while(sum < k) {
            cnt++;
            sum += log(cnt) / log(2);
        }

        printf("%d\n", cnt - 1);
    }

    return 0;
}






猜你喜欢

转载自blog.csdn.net/tigerisland45/article/details/80161518
今日推荐