计算一个整数的二进制表示中连续出现1最多的次数。
比如13的二进制是:1101,那么他的二进制表示中连续出现的1最多为2次,所以答案就是2:
var num = parseInt(readline()); // 将数据转换成二进制 const str = num.toString(2); // 用正则匹配二进制字符串中连续的1出现的情况 const arr = str.match(/1*/ig); // 判断匹配中的结果 if(arr.length) { // 匹配中了多个连续的1,获取长度最长的那个 print(Math.max(... arr.map(item => item.length))); } else { // 如果数组长度为0,则是没有匹配中连续的1,则查看是否有1出现 print(str.indexOf("1") >= 0 ? 1 : 0); }
const readline = require("readline") const rl = readline.createInterface({ input: process.stdin, output: process.stdout }) rl.on("line", line => { const arr = parseInt(line).toString(2).split("0") const result = arr.reduce((prev, cur) => { return prev = cur .length > prev ? cur.length : prev }, 0) console.log(result) })
//方法一:正则 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))
n = int(input()) s = int(bin(n)[2:]) count = 0 flag = 0 max_count = 0 for i in range(len(bin(n)[2:])): if flag == 0 and str(s)[i] == "1": count = 1 flag = 1 elif flag == 1 and str(s)[i] == "1": count += 1 else: flag = 0 max_count = max(max_count, count) print(max_count)
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNextLong()){ long n = scanner.nextLong(); System.out.println(process(n)); } } public static int process(long n){ int[] bin = getB(n); int max = 0; int now = 0; for (int j : bin) { if (j == 1) { now++; max = Math.max(max, now); } else { now = 0; } } return max; } public static int[] getB(long n){ int[] c = new int[64]; for (int i = 0; i < 64; i++) { c[i] = (n & (1L << i))> 0 ? 1 : 0; } return c; }
var a = parseInt(readline()); fn(a) function fn(a) { var num = a.toString(2); var arr = new Array(num.length); if (num[0] == "1") { arr[0] = 1; } else { arr[0] = 0; } for (var i = 1; i < num.length; i++) { if (num[i] == num[i - 1] && num[i] == "1") { arr[i] = arr[i - 1] + 1 } else { arr[i] = 1 } } console.log(Math.max(...arr)) }
#include <iostream> (720)#define ll long long using namespace std; int main () { ll n; int cnt = 0, ans = 0; cin >> n; while (n) { if ((n ^ 1) == n - 1) cnt++; else cnt = 0; ans = max(ans, cnt); n >>= 1; } cout << ans << endl; return 0; }
// 不用正则的方法 function maxNum(number){ if ( !(1<=number && number<=10^18)){ return false } let count = 0 let icount = 1 // 内部自增的变量 let arr = number.toString(2).split('') // 转换成数组 for (let i = 0 ;i<arr.length;i++){ (parseInt(arr[i])+parseInt(arr[i+1]) == 2)?icount+=1:icount=1 count<icount?count=icount:count = count } console.log(count) } maxNum(65528) // 13