题目大意:
求一个最大的整数 n ,使得 n! 可以在一个 x-bit 计算机中以 unsigned integer(无号整数)来表示。即求 n!< 2 ^ x 成立时 n 最大的值。
分析:
一开始看感觉好复杂,但如果对两边取对数,就可以变成 log(n!) < log(2^x),即 log(n!) < x * log(2),化简一下变成
log(1) / log(2) + ......log(n) / log(2) < x 这样就好做啦
代码:
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int y;
while(~scanf("%d", &y) && y){
int x = pow(2, (y-1960) / 10 + 2);
double f = 0.0;
int i;
for(i = 1; ; i++){
f += log(i) / log(2);
if(f > x) break;
}
printf("%d\n", i-1);
}
return 0;
}