问题(Hackerrank) 给定以10为底的整数n,将其转换为二进制(以2为底)。然后找到并打印表示以n的二进制表示形式表示的连续1的最大数量的以10为底的整数。
我的代码如下:其中显示“ RuntimeError”-,并且编译器消息为“由于超时终止”。
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int n=scn.nextInt();
int rem = 0,s = 0,t = 0;
while (n > 0)
rem = n % 2;
n = n / 2;
if (rem == 1)
{
s++;
if (s >= t)
t = s;
else
s = 0;
}
System.out.println(t);
scn.close();
}
}
您能帮我解决此错误吗?
答案 0 :(得分:3)
while (n > 0)
rem = n % 2;
n = n / 2;
在这里,n = n / 2
在循环之外,所以n
永远不会改变,这将是一个无限循环。这就是为什么您超时的原因。
将其更改为:
while (n > 0) {
rem = n % 2;
n = n / 2;
}
提示:始终使用大括号。它们将确保无论任何块,if
/ while
/中都包含多条指令,并提高了单指令块的可读性。