ACM--数学--HDOJ 1141--Factstone Benchmark--水


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
   
   
   
   
1960 1981 0
 

Sample Output
   
   
   
   
3 8


题意:求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;
}





你可能感兴趣的:(数学,ACM,Benchmark,hdoj,水,1141,Factstone)