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
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; }