思路:题目意思是求n!<2^bit时n最大可以取多少;对两边取对数,得到log(1)+log(2)......+log(n)<bit*log(2)
代码如下:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int a[30];
int i;
int y=1960;
int n;
long bit;
double sum;
for(i=0;i<30;i++)
{
a[i]=y;
y+=10;
}
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
sum=0.0;
for(i=0;i<30;i++)
{
if(n>=a[i]&&n<a[i+1])
{
bit=pow(2,i+2);
}
}
for(i=1;;i++)
{
sum+=log(i)/log(2);
if(sum>=(double)bit)
break;
}
printf("%d\n",i-1);
}
return 0;
}