C ++中第K个置1位在数字中的位置
在这个问题中,我们给了两个整数N和K。我们的任务是找到第K个索引,该索引设置了一个从右开始计数的N位数。
从数字的二进制表示形式检查设置位。二进制表示形式的索引从右方向的索引0开始,并向左传播。
示例-在二进制数'011101'中,从右开始的索引0为1,从右开始的索引1为0,依此类推。
现在,让我们以一个例子来理解问题
输入-N = 6,K = 2
输出-2
说明-6的二进制表示形式是0110。右边第二个置1的位将在索引2处。
为了解决这个问题,我们将必须检查当前位是否已设置,如果已设置,则我们将减小K的值。每次检查后,我们将数字bt 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
以上是 C ++中第K个置1位在数字中的位置 的全部内容, 来源链接: utcz.com/z/347159.html