HDU 1141(数学题)
题意:1960年的计算机是4位处理器,1970年是8位,没过10年翻一倍,求当前年份的计算机处理器能存储的阶乘n!中n的大小。
思路:假设处理器的位数为x位,则n! < 2^x,可得log2(1) + log2(2) + log2(3) + ……+log2(n) < log2(2^x) = x。
#include <cstdio>
#include <cstring>
#include <cmath>
#define log2(x) log10(double(x))/log10(2.0)
void main()
{
int a[(2160-1960)/10+1]; //year_divided_by_ten
int i, j;
double d;
a[0] = 4;
for (i = 1; i < sizeof a / sizeof(int); ++i)
{
a[i] = 2 * a[i-1];
}
for (i = 0, j = 2, d = 0; i < sizeof a / sizeof(int); ++i)
{
do
{
d += log2(j++);
} while (d < a[i]);
d -= log2(--j);
a[i] = j - 1;
}
int year;
while (scanf("%d", &year), year)
{
year = (year - 1960) / 10;
printf("%d\n", a[year]);
}
}
还没有评论,来说两句吧...