首页 > 试题广场 >

连续二进制

[编程题]连续二进制
  • 热度指数:792 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
计算一个整数的二进制表示中连续出现1最多的次数。
比如13的二进制是:1101,那么他的二进制表示中连续出现的1最多为2次,所以答案就是2:

输入描述:
一个整数n表示要计算的数字。(1<=n<=1018



输出描述:
输出一个数字表示n的二进制表示中连续出现1最多的次数。
示例1

输入

13

输出

2
//方法一:正则
let n=parseInt(readline())
function fn(n){
    let str=n.toString(2)
    var reg=new RegExp(/1+/g);
    var arr=str.match(reg);
    arr=Array.from(arr)
    var max=0;
    arr.forEach((item)=>{
        if(item.length>max){
            max=item.length
        }
    })
    return max
}
console.log(fn(n))


//方法二:字符比较
let n=parseInt(readline())
function fn(n){
    let str=n.toString(2)
    let max=0
    let temp=0
    for(let i=0;i<str.length;i++){
        if(str[i]==='1'){
            temp++
            if(temp>max){max=temp}
        }
        if(i>0 && str[i]==='0' && str[i-1]==='1'){
            temp=0
        }
    }
    return max
}
console.log(fn(n))

编辑于 2020-08-27 10:43:10 回复(0)