如何在数组中添加字符串

时间:2013-12-14 19:31:23

标签: java arrays string

2 ^ 1000 = 2147483647,现在我想在答案中加上所有个别数字(例如2 + 1 + 4 + 7 + 4 ......) 这是我的代码,但我得到答案为-10。这是我的逻辑: 将2147483647转换为字符串 将该字符串转换为char 创建一个char数组并将所有char放入该数组中 创建一个int数组并将所有这些字符放入该数组中,然后将元素加起来

我的代码

   int total = 0;
    int x = (int) Math.pow(2, 1000);        
    System.out.println("2^1000 = " + x);

    String power = Integer.toString(x);

    ArrayList<Integer> powstoint = new ArrayList<Integer>();
    //From string to char
    char[] stringtochar = power.toCharArray();
    for(int b = 0; b<stringtochar.length;b++){
        powstoint.add(b, power.indexOf(Integer.parseInt(power)));
        total = total + powstoint.get(b);
    }
    System.out.println(total);

    }

3 个答案:

答案 0 :(得分:1)

2^anything不能是奇数。

2^1000远远超过2147483647

整数溢出再次发生。 int无法适应2^1000

答案 1 :(得分:1)

尽管您的整数溢出,但问题是power.indexOf(Integer.parseInt(power))将始终返回-1(请参阅docs

由于您的号码中有10位数字,因此输出为-10。

要实现您的目标,请使用Character.getNumericValue(char ch)

char[] stringtochar = power.toCharArray();
for(int b = 0; b<stringtochar.length;b++){
    powstoint.add(b, Character.getNumericValue(stringtochar[b]));
    total = total + powstoint.get(b);
}

您的程序中无需使用List。你可以直接执行这样的总和:

for(char c : power.toCharArray()){
    total += Character.getNumericValue(c);
}

看起来你正在做欧拉项目问题#16:

使用BigDecimal存储您的号码并避免溢出:

BigDecimal x = new BigDecimal(Math.pow(2, 1000));  

然后获取char数组,使用相同的过程:

char[] array = x.toString().toCharArray();

答案 2 :(得分:0)

largest possible int value214783647,即2^31-1

正在发生的事件2^1000大于int的最大可能值,因此它只是使其成为最大值(214783647)。