/*1119. Factstone Benchmark(代数转换成两边取log)
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int year;
int p;
int n;
double sum;
while(scanf("%d", &year) && year)
{
p = pow(2, (year - 1960) / 10 + 2);
n = 1;
sum = 0;
//因为字长length=2^p,那么最大的数为 2^length
//若要 2^length >= n! = n * n-1 * n-2 * ... * 2 * 1
//对两边取log, 即 log2(2^length) >= log2(n!) = log2(n) + log2(n-1) + ...+log2(1)
//也就是等于 length >= log(n)/log2 + log(n-1)/log2 + ...+ log(1)/log2
while(sum <= p)
{
sum += log(n) / log(2);
++n;
}
printf("%d\n", n - 2);
}
system("pause");
return 0;
}
Sicily.1119. Factstone Benchmark(代数转换成两边取log)
最新推荐文章于 2021-02-05 03:20:40 发布