题目描述
求一个byte数字对应的二进制数字中1的最大连续数
例如:
3的二进制为00000011,最大连续2个1
输入:
3
5
输出:
2
1
以下是本篇文章正文内容,下面案例可供参考
解题思路1
因为转换为二进制后,只有0或1,现在要求得1 的最大连续个数
可以将其转化为二进制,再将转换好的二进制以0分隔,统计分隔好的字符串的最大长度
代码如下
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
String s = Integer.toBinaryString(n);//转化为二进制
String[] str = s.split("0");//将其用0分隔
int max = 0;
for (String value : str) {//把每一段字符串给value
if (value.length() > max) {//统计最大值
max = value.length();
}
}
System.out.println(max);
}
}
}
解题思路2
用与运算(&)记录连续1 的个数,定义一个count
和 一个maxCount
count
表示当前连续1 的个数,maxCount
表示最大连续1 的个数
判断完n的当前位后,n左移一位,继续判断,直到得到最大连续1 的个数为止
代码如下
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int count = 0;
int maxCount = 0;
while (n!=0){
if((n&1)==1){//表示当前位是1
count ++;
maxCount = Math.max(maxCount,count);
}else {
count=0;
}
n>>=1;//n左移一位
}
System.out.println(maxCount);
}
}