头像
小卡拉米
编辑于 2023-07-19 18:08
+ 关注

I题

I题我真不理解了,第一个for循环从62开始就AC,42开始就百分之25正确,32开始就百分之75正确,什么原因啊。题目不是保证n小于2的32次方吗

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
int fac[70];
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int n;
    cin>>n;
    if(n==0)
    {
        cout<<0;
        return 0;
    }
    int len=__builtin_popcount(n);
    len--;
    int ans=0;
    for(int i=62;i>=0;i--)
    {
        if(n&(1<<i))
        {
            ans+=(1<<i);
            break;
        }
    }
    fac[0]=1;
    for(int i=1;i<=62;i++)
        fac[i]=fac[i-1]*2;
    ans+=fac[len]-1;
    cout<<n-ans;
}

全部评论

(1) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐