题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1141
题意:
有个公司研制计算机芯片,1960年发布4位的,1970年发布8位的,1980年发布16位的……每十年位数翻倍。假设芯片储存无符号整数,给定一个日期,问当年的最新芯片最大可以储存的阶乘是几的阶乘
思路:
实际就是求n! <= 2^x中的n,但显然这两个数的范围很大,不能直接表示,可以对两数同时取对数,就很简单了
#include <bits/stdc++.h>
using namespace std;
const int N = 210;
int arr[N];
int main()
{
arr[0] = 4;
for(int i = 1; i <= 25; i++) arr[i] = 2 * arr[i-1];
int n;
while(scanf("%d", &n), n)
{
int tm = arr[(n-1960)/10];
double sum = 0.0;
int res;
for(int i = 1; ; i++)
{
sum += log(1.0*i) / log(2.0);
if(sum <= tm) res = i;
else break;
}
printf("%d\n", res);
}
return 0;
}