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.