【发布时间】:2022-07-21 21:36:06
【问题描述】:
给定一个整数 n(1≤n≤1018)。我需要将此数字中的所有未设置位设置为设置。
我的方法:让最高有效位在位置 p,然后所有设置位的 n 将是 2p+1-1。
我的所有测试用例都匹配,除了下面显示的一个。
输入
288230376151711743
我的输出
576460752303423487
预期输出
288230376151711743
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
int main() {
ll n;
cin >> n;
ll x = log2(n) + 1;
cout << (1ULL << x) - 1;
return 0;
}
【问题讨论】:
-
关于成为精英 C++ 大师的秘密捷径有一个流行的神话:扔掉你的 C++ 教科书;取而代之的是做随机编码难题,否则,它们没有内在的学习价值,除了不良的编程习惯外,它们不会教任何东西。这个神话主要是由一堆点击诱饵网站传播的,这些网站承诺只要他们解决了他们的难题,就可以将任何人变成 C++ 超级黑客。最终每个人都意识到这些编码难题是多么无用。但是他们已经花费了大量时间编写一个又一个编码难题。他们没有什么可展示的。
-
我很害怕我不明白这个问题。如果你设置一个大小为
Nbits 的整数的所有未设置的位,会不会将Nbits 设置为1?
标签: c++ bit-manipulation