由于hackerrank程序中的Java代码超时错误而终止

时间:2018-12-14 07:53:46

标签: java compiler-errors

问题(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();
    }
}

您能帮我解决此错误吗?

1 个答案:

答案 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 /中都包含多条指令,并提高了单指令块的可读性。