C++ 中数字的第 K 个设置位的位数
在这个问题中,我们给定两个整数 N 和 K。我们的任务是找到数字 N 的第 K 个设置位的索引,从右开始计数。
设置位是从数字的二进制表示中检查的。二进制表示中的索引从右边的索引 0 开始,并向左传播。
示例 - 在二进制数“011101”中,从右边索引 0 处我们有 1,从右边索引 1 处我们有 0,依此类推。
现在,让我们举一个例子来理解这个问题
输入 - N = 6,K = 2
输出 - 2
解释 - 6 的二进制表示为 0110。从右边数起的第 2 个设置位将在索引 2 处。
为了解决这个问题,我们将不得不检查当前位是否已设置,如果是,我们将减少 K 的值。在每次检查后,我们将数字向左移动 1 位,这将给出下一位,我们还将维护已完成的移位次数。一旦 K 的值变为 0,我们将打印已完成的移位次数。
示例
程序展示了我们逻辑的实现
#include <iostream>
using namespace std;
int FindIndexKthBit(int N, int K) {
int index=0;
while (N) {
if (N & 1)
K--;
if (!K)
return index;
index++;
N = N >> 1;
}
return -1;
}
int main() {
int N = 12, K = 2;
cout<<"The "<<K<<"th set bit of the number "<<N<<" is at index : \t";
int index = FindIndexKthBit(N, K);
if (index!=-1)
cout<<index;
else
cout<<"\nsorry no index found";
return 0;
}输出
The 2th set bit of the number 12 is at index : 3
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP