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