计算 n的最大值,2^n>n!,如果一直整数相乘的话,会越界,所以要取对数。
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main(){
int n, i;
double m, sum;
while (scanf("%d", &n) && n){
m = pow(2, (n - 1940) / 10) * log(2);
sum = 0;
for(int i = 1; ; i++){
sum += log(i);
if (sum > m){
printf("%d\n", i - 1);
break;
}
}
}
return 0;
}