Amtel has announced that it will release a 128-bit computer chip by 2010, a 256-bit computer by 2020, and so on, con- tinuing 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 ad- vertise 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 com- puter 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
问题简述:a在1960年发明了4位计算机 ,1970年发明了8位计算机每十年将其字大小翻一番。要求 Factstone等级n,使得n!小于位数为k的计算机所能表示的最大整数2^k-1。
思路:题目可以想到最直接的方法是算n!,但是会溢出,所以用对数函数
log2(n!)=log2(n)+log2(n-1)+……+log2(1)<=log2(2^k-1)<k
来计算
方法一:比较好懂,要注意log函数是以2为底,所以log2(n)要利用换底公式写成log(n)/log(2)
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int main(){
int y;
while (scanf("%d",&y)!=EOF&&y){
double k=pow(2,(2+(y-1960)/10));
int cnt=1; //注意cnt要初始化为1
double sum=0;
while(sum<k){
cnt++;
sum+=log(cnt)/log(2);
}
printf("%d\n",cnt-1);
}
return 0;
}