所要求的是最大的n使得n! < 2^x
则找到log(n!) < x*log(2)即可
代码如下:
#include <math.h>
#include <stdio.h>
#define MAXN 50
int n, i, j, a, b[MAXN];
double sum;
void init() {
for(i=0; i<25; ++i) {
a = pow(2, i+2);
sum = 0.0;//浮点数
for(j=1; ; j++) {
sum += log(j);
if(a*log(2) <= sum) {
b[i] = j;
break;
}
}
}
}
int main(void) {
init();
while(scanf("%d", &n), n) {
printf("%d\n", b[(n-1960)/10]-1);
}
return 0;
}
0ms代码如下:
#include <math.h>
#include <stdio.h>
int a[] = {3, 5, 8, 12, 20, 34, 57, 98, 170, 300,
536, 966, 1754, 3210, 5910, 10944,
20366, 38064, 71421, 134480, 254016};
int n;
int main(void) {
while(scanf("%d", &n), n) {
printf("%d\n", a[(n-1960)/10]);
}
return 0;
}