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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP