加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

hdu1141 (Factstone Benchmark(利用对数进行大数比较))

发布时间:2020-12-14 02:49:17 所属栏目:大数据 来源:网络整理
导读:这个题的意思就是求? N!2^bit 两边同时取对数,得到??? log(N!)bit*log(2.0),变换形式得到?? log(N!)/ log(2.0)bit; log(N!)=log(1*2*3*4*……N)=log(1)+log(2)+log(3)+log(4)+……log(N); 则问题转化为求:???? log(1)/ log(

这个题的意思就是求? N!<2^bit

两边同时取对数,得到??? log(N!)<bit*log(2.0),变换形式得到?? log(N!)/ log(2.0)<bit;

log(N!)=log(1*2*3*4*……N)=log(1)+log(2)+log(3)+log(4)+……log(N);

则问题转化为求:???? log(1)/ log(2.0)+?log(2)/ log(2.0)+?log(3)/ log(2.0)+……?log(N)/ log(2.0)<bit??

从而避免了大数计算,利用对数直接比较,将问题简单化

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i;
    __int64 t;
    double ans;
    while(scanf("%d",&n),n!=0)
    {
        t=(n-1960)/10+2;
        t=1<<t;
        i=0;
        ans=0;
        while(ans<t)
        {
            ans+=log((double)(++i))/log(2.0);<span style="color: rgb(0,130,0); font-family: Consolas,'Courier New',Courier,mono,serif; line-height: 18px; background-color: rgb(248,248,248);">//特别注意?i?=?1?,log(i++)不知道为什么错了?只能i?=?0,log(++i)</span>
        }
        printf("%dn",i-1);
    }
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读