大值的数字格式异常

时间:2013-11-02 13:34:46

标签: java numberformatexception

此代码块在n

中的输入600000上给出数字格式异常
import java.util.*;
class SpoTwo{
    public static void main(String args[]){
    Scanner sc=new Scanner(System.in);
    int testcase,n,answer;
    long bin;
    String s;
    testcase=sc.nextInt();
    for(int i=0;i<testcase;i++){
        n=sc.nextInt();
        s=Integer.toBinaryString(n);
        bin=Integer.parseInt(s);
        answer=(int)Math.pow(2,bin*2);
        System.out.println(answer%1000000007);
    }
    }

} 例外: Exception in thread "main" java.lang.NumberFormatException: For input string: "10010010011111000000" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:495) at java.lang.Integer.parseInt(Integer.java:527) at SpoTwo.main(SpoTwo.java:12)

2 个答案:

答案 0 :(得分:3)

600000的二进制表示形式为10010010011111000000。这不是有效的10整数。它是一个有效的基数2整数。使用

bin = Integer.parseInt(s, 2);

Here's the method's javadoc.

您正在使用的重载parseInt方法

  

将字符串参数解析为带符号的十进制整数。那些角色   在字符串中必须都是十进制数字,除了第一个   字符可以是ASCII减号' - '('\ u002D')来表示a   负值或ASCII加号'+'('\ u002B')表示a   正面价值。返回结果整数值,就像是一样   参数和基数10作为参数给出   parseInt(java.lang.String, int)方法。

答案 1 :(得分:0)

你有一个字符串并移动到二进制,然后将该字符串转换为整数,然后vc是权力,所以整个支持一定数量的房屋,所以这是一个爆炸,你可以使用paserInt把数字家庭或整体变成双人。