POJ 2661 Factstone Benchmark

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值