C题 没开long double导致wa 请教各位大佬

如题 这题没开long double导致最后通过率是百分之九十多,开了就a了,请教各位是什么原因呢 有什么hack数据呀

#include <bits/stdc++.h>

using namespace std;
typedef long long LL;


void solve(){
    LL n;
    cin>>n;
    LL add = log2((long double)n);
//     LL add2 = log2(n);
//     cout<<add<<" "<<add2<<endl;
    LL last=add;
    LL res;
    do{
        last=add;
        res = 2ll*(add+n);
        add = log2((long double)res)-1; 
    }while (add!=last);
    cout<<res<<endl;

}


int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T;
    cin>>T;
    while(T--){
        solve();
    }

    return 0;
}

全部评论
应该是卡精度了,你这里这个n可能到1e18,只有开long double才能保证在这么大的范围内保持精度(double是64位,ll也是64位,都差不多只能存十进制18位的数,那么double不就退化为整数了,无法保持高精度了,我是这么理解的),最近有场ABC也是要开long double。
1 回复 分享
发布于 02-12 15:01 上海
你要是学过机组就很好解释了,类似float转int,相同字节的情况下浮点数转整型是可能发生精度缺少的,所以 float转int前要先转为double,你double转long long 前也要先转 long double才不会出现精度缺少
点赞 回复 分享
发布于 02-13 11:51 未知
帮顶(可以丢给AI看看 打牛可乐tag好像就有用)
点赞 回复 分享
发布于 02-12 11:32 北京

相关推荐

牛客10001:问就是六个月,全国可飞,给钱就干
点赞 评论 收藏
分享
喜欢喜欢喜欢:这是我见过最长最臭的简历
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务