题意:找到 n ! < 2 ^ m 最大的n是多少?
思路: 2^m = n!
两边同时log log2^m = log n !
log n! = log1+log2+......logn
log2^m = m*log2
m*log2 = log1+log2.....一直加到大于m*log2就不加了,那个n就是最大的n阶乘
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
if(n == 0)
break;
n = (n - 1960)/10+2;
double bit = (1 << n )*log(2.0);
double count = 0;int i = 0;
while(count < bit)
{
count += log(++i) ;//特别注意 i = 1 ,log(i++)不知道为什么错了 只能i = 0,log(++i)
}
printf("%d\n",i-1);
}
return 0;
}