[英]I want to know if this is a good programming practise else how can i write the program more optimal and efficient
我想编写将十进制转换为二进制,然后在其中不使用诸如Integer.toBinary()之类的功能的情况下,找到连续的1的程序。我的程序是:
public class Practise {
static String decimalToBinary(int num) {
String binaryN = "";
while (true) {
binaryN += num % 2;
num = num / 2;
if (num == 1) {
binaryN += 1;
break;
}
}
String nBinary = "";
for (int i = binaryN.length() - 1; i >= 0; i--) {
nBinary += binaryN.charAt(i);
}
System.out.println(nBinary);
return nBinary;
}
static int consecutiveOnes(String binaryN) {
int consecutive = 0;
int max = 0;
boolean isFreshStart = false;
for (int i = 0; i < binaryN.length(); i++) {
if (binaryN.charAt(i) == '1') {
if (isFreshStart) {
consecutive = 1;
isFreshStart = false;
} else
consecutive++;
} else {
isFreshStart = true;
}
if (consecutive > max)
max = consecutive;
}
return max;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String binaryN = decimalToBinary(n);
System.out.println(consecutiveOnes(binaryN));
}
}
如果不是我的程序是最优的,那么如果要更优化,该如何预先感谢。
如果您的目标是计算连续的1,那么最好根本不转换为二进制字符串。
您可以使用位移对位进行迭代:
int work = num;
while (work > 0) {
int bit = work & 1;
work >>= 1;
// Todo: count consecutive 1s
}
这种方法将使用更少的存储空间(基本上是单个int
而不是String
),并且工作速度更快,而无需创建其他对象和不必要的中间类型转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.