当输入为1024或更多时,程序输出有错误。任何建议?

时间:2017-01-06 20:18:39

标签: java

我编写了一个java代码,用于将十进制数转换为二进制数。它运行良好但输入为1024或更多时输出错误。例如:输入为1024输出为141006540​​8。

    import java.util.Scanner;
    public class story {
        public static void main(String args[])
        {
            Scanner scan=new Scanner(System.in);
            System.out.println("Enter a positive decimal number");
            binary bin=new binary();
            System.out.println(bin.calculate(scan.nextInt()));
        }
    }

    public class binary {
         public long calculate(int num) 
        {
            int i=1;
            long result=0;
            while(num>0)
            {
                result=result+(num%2)*i;
                i*=10;
                num/=2;
            }
            return result;
       }

    }

3 个答案:

答案 0 :(得分:0)

您遇到此问题,因为i的数据类型为int,即溢出。

解决方案是简单地将i的数据类型从int更改为long

以下是更正后的代码段:

public static final class binary {
    public long calculate(int num) {
        long i = 1; //Note the change at this line
        long result = 0;
        while (num > 0) {
            result = result + (num % 2) * i;
            i *= 10;
            num /= 2;
        }
        return result;
    }
}

<强>输入:

1024

<强>输出:

10000000000

答案 1 :(得分:0)

错误在类型i中,它应该很长。

<强> CODE:

import java.util.Scanner;
    public class story {
        public static void main(String args[])
        {
            Scanner scan=new Scanner(System.in);
            System.out.println("Enter a positive decimal number");
            System.out.println(calculate(scan.nextInt()));
        }


            public static long calculate(int num) 
           {
               long i=1;
               long result=0;
               while(num>0)
               {
                   result=result+(num%2)*i;
                   i*=10;
                   num/=2;
               }
               return result;
          }
}

<强>输出:

Enter a positive decimal number
1026
10000000010

答案 2 :(得分:0)

“i”变量超过输入1024及以上的最大整数值。 请参阅此处:Why 10000000*1000 giving 1410065408 in java?