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