0

此代码块在输入 600000 上给出数字格式异常n

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)

4

2 回答 2

3

的二进制表示60000010010010011111000000。这不是一个有效的以 10 为底的整数。它是一个有效的以 2 为底的整数。利用

bin = Integer.parseInt(s, 2);

这是该方法的javadoc。

您使用的重载parseInt方法

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

于 2013-11-02T13:40:11.950 回答
0

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

于 2013-11-02T13:47:21.500 回答