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

更新于: 2020年4月17日

459 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.