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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告