sicily 1119. Factstone Benchmark

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 Factstonerating is defined to be the largest integer n such that n! can be represented as an unsigned integer in a computer word.

Input
Given a year 1960 ≤ y ≤ 2160, what will be the Factstone rating of Amtel's most recently released chip? 
Output
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. For each test case, output a line giving the Factstone rating. 
Sample Input
 Copy sample input to clipboard 
1960
1981
0
Sample Output
3
8

 

分析:因为每 10 年翻一番,那么就是每十年位数变为原来的两倍,所以是2^((year - 1960) / 10 + 2)
那么最大的位数是2^22,远远超过了现有的计算机能表示的范围,所以不能直接使用阶乘计算。因为只是要找到不大于对应年份计算机能表示的最大值,所以可以用对数来计算。

 

#include <iostream>
#include <cmath>

using namespace std;

int main(int argc, char const *argv[])
{
    int year;
    while (cin >> year && year != 0) {
        int times = (year - 1960) / 10;
        int bit = (int)pow(2, times + 2);
        double sum = 0;
        int n = 1;
        while (sum <= bit) {
            sum += log2(n++);  // 将大整数运算转换为对数运算
        }
        cout << n - 2 << endl;
    }
    return 0;
}

 

posted @ 2014-11-30 10:13  厕所门口~~  阅读(391)  评论(0编辑  收藏  举报