HDU 1141(数学题)

柔光的暖阳◎ 2022-09-20 11:19 255阅读 0赞

题意:1960年的计算机是4位处理器,1970年是8位,没过10年翻一倍,求当前年份的计算机处理器能存储的阶乘n!中n的大小。

思路:假设处理器的位数为x位,则n! < 2^x,可得log2(1) + log2(2) + log2(3) + ……+log2(n) < log2(2^x) = x。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cmath>
  4. #define log2(x) log10(double(x))/log10(2.0)
  5. void main()
  6. {
  7. int a[(2160-1960)/10+1]; //year_divided_by_ten
  8. int i, j;
  9. double d;
  10. a[0] = 4;
  11. for (i = 1; i < sizeof a / sizeof(int); ++i)
  12. {
  13. a[i] = 2 * a[i-1];
  14. }
  15. for (i = 0, j = 2, d = 0; i < sizeof a / sizeof(int); ++i)
  16. {
  17. do
  18. {
  19. d += log2(j++);
  20. } while (d < a[i]);
  21. d -= log2(--j);
  22. a[i] = j - 1;
  23. }
  24. int year;
  25. while (scanf("%d", &year), year)
  26. {
  27. year = (year - 1960) / 10;
  28. printf("%d\n", a[year]);
  29. }
  30. }

发表评论

表情:
评论列表 (有 0 条评论,255人围观)

还没有评论,来说两句吧...

相关阅读

    相关 HDU 1141(数学)

    题意:1960年的计算机是4位处理器,1970年是8位,没过10年翻一倍,求当前年份的计算机处理器能存储的阶乘n!中n的大小。   思路:假设处理器的位数为x位,则n! <