zoukankan      html  css  js  c++  java
  • Factstone Benchmark

    【问题描述】

    Amtel已经宣布,到2010年,它将发行128位计算机芯片;到2020年,它将发行256位计算机;等等,Amtel坚持每持续十年将其字大小翻一番的战略。(Amtel于2000年发行了64位计算机,在1990年发行了32位计算机,在1980年发行了16位计算机,在1970年发行了8位计算机,并首先在1960年发行了4位计算机)

    Amtel将使用新的标准检查等级——Factstone——来宣传其新芯片大大提高的能力。 Factstone等级被定义为这样的最大整数n,使得n!可以表示为一个计算机字中的无符号整数(比如1960年的4位计算机可表示3!=6,而不能表示4!=24)。

    给出一个年份1960 ≤ y ≤ 2160,Amtel最近发布的芯片的Factstone等级是什么? 输入:

    给出若干测试用例。每个测试用例一行,给出年份y。在最后一个测试用例后,给出包含0的一行。

    输出:

    对于每个测试用例,输出一行,给出Factstone等级。

    方法1:直接求不大于2k-1的最大整数n!,这种方法极易溢出且速度慢;

    方法2:采用对数计算,即根据

                                  log2n!=log2n+log2(n-1)+...+log21<=log2(2k-1)<k

    注:计算机中的log其实是ln。需要换底公式 logab=lna/lnb;

     1 /*
     2  * FactstoneBenchmark.cpp
     3  *
     4  *  Created on: 2016年3月2日
     5  *      Author: hoojjack
     6  */
     7 
     8 
     9 #include <stdio.h>
    10 #include <math.h>
    11 int main(){
    12     int i,j,y;
    13     double w,sum;
    14     while(1==scanf("%d",&y)&&y){
    15 //        w=log(4.0);
    16 //        w=2.0;
    17         //计算机中的log 是数学中的ln 而不是以10为底数的取对数,所以如果想表示成以2为底4的对数
    18         //需要换底公式
    19         w=log(4.0)/log(2.0);
    20 //        printf("w=%lf	",w);
    21 //        printf("%lf	",log(4)/log(2));
    22         for(i=1960;i<=y;i+=10){
    23             w*=2;
    24         }
    25 //        printf("w=%lf	",w);
    26         j=1;
    27         sum=0.0;
    28         while(sum<w){
    29             sum+=(log((double) ++j)/log(2));
    30 
    31         }
    32         printf("number=%d
    ",j-1);
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    如何用纯 CSS 创作一个跳动的字母 i
    如何用纯 CSS 创作一个变色旋转动画
    如何用纯 CSS 创作气泡填色的按钮特效
    如何用纯 CSS 创作一个跳 8 字型舞的 loader
    如何用纯 CSS 创作一只徘徊的果冻怪兽
    如何用纯 CSS 创作一个单元素抛盒子的 loader
    如何用纯 CSS 创作单元素点阵 loader
    如何用纯 CSS 创作一个摇摇晃晃的 loader
    [Monkey King]
    473. 核电站问题
  • 原文地址:https://www.cnblogs.com/hoojjack/p/5239717.html
Copyright © 2011-2022 走看看