HDOJ题目地址:传送门
Factstone Benchmark
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2010 Accepted Submission(s): 1114
Problem 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?
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
Sample Output
题意:求N!< 2 ^ bit 成立的 使N最大的值
同时对两边取对数 log(N!)<log(2^bit)
log(1)+log(2)+...+log(n)<bit*log(2)
(log(1)+log(2)+...+log(n))/log(2)<bit
#include <iostream>
#include <cstdio>
#include<math.h>
using namespace std;
/**
题意:要求 N!<2^bit ,
同时对两边取对数 log(N!)<log(2^bit)
log(1)+log(2)+...+log(n)<bit*log(2)
(log(1)+log(2)+...+log(n))/log(2)<bit
*/
int main(){
int year,bit,n;
double result;
while(scanf("%d",&year)&&year){
year=(year-1960)/10+2;
//移位获得位数
bit=1<<year;
result=0.0;
n=1;
do{
result+=log(n)/log(2);
n++;
}while(result<bit);
//-1因为 n 从1开始,然后 n++ 还加了 1
printf("%d\n",n-1-1);
}
return 0;
}