C++程式:查詢數字二進位制形式中連續1的最長長度


假設我們有一個數字 n,我們需要找到其二進位制表示中連續1的最長長度。

因此,如果輸入類似於 n = 312,則輸出將為 3,因為 312 的二進位制表示為 100111000,並且存在 3 個連續的 1。

為了解決這個問題,我們將遵循以下步驟:

  • ret := 0,len := 0

  • 從 i := 0 開始迴圈,當 i < 32 時,更新(i 增加 1),執行以下操作:

    • 如果 n/2 是奇數,則

      • (len 增加 1)

    • 否則

      • len := 0

    • ret := ret 和 len 的最大值

  • 返回 ret

讓我們看看下面的實現,以便更好地理解

原始碼 (C++):

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(int n) {
      int ret = 0;
      int len = 0;
      for(int i = 0; i < 32; i++){
         if((n >> i) & 1){
            len++;
         }else{
            len = 0;
         }
         ret = max(ret, len);
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << ob.solve(312);
}

輸入

312

輸出

3

更新於: 2020年10月8日

204 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.