为了账号安全,请及时绑定邮箱和手机立即绑定

整数迭代帮助java

整数迭代帮助java

烙印99 2022-03-10 15:42:21
我目前在将整数数组组合成整数时遇到问题。我在Way to combine integer array to a single integer variable?中研究了其他几种方法来实现它们?,但我仍然不明白为什么我会遇到错误。我的目标是转:[6, 2, 3, 3, 8, 7, 7, 7, 0, 1, 6]进入62338777016它目前在给定较小的整数数组时有效,例如:[1, 3, 4, 4] -> 1344一旦元素数量达到 10,它就会开始崩溃。有人有可能的解决方案吗?
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

您正在溢出整数的最大大小 2147483647。解决此问题的一种方法是使用 aBigInteger而不是 a int:


BigInteger bigInt = BigInteger.ZERO;

for (int i : ints) {

    bigInt = bigInt.multiply(BigInteger.TEN).add(BigInteger.valueOf(i));

}


查看完整回答
反对 回复 2022-03-10
?
智慧大石

TA贡献1946条经验 获得超3个赞

您可以像这样执行它:


Integer[] arr = {6, 2, 3, 3, 8, 7, 7, 7, 0, 1, 6};

Long val = Long.valueOf(Arrays.stream(arr).map(String::valueOf).collect(Collectors.joining("")));


查看完整回答
反对 回复 2022-03-10
?
哔哔one

TA贡献1854条经验 获得超8个赞

public static long convert(int[] arr) {

    long res = 0;


    for (int digit : arr) {

        // negative value is marker of long overflow

        if (digit < 0 || res * 10 + digit < 0)

            throw new NumberFormatException();

        res = res * 10 + digit;

    }


    return res;

}

这不是一种通用方法,因为Long.MAX_VALUE. 否则,您必须使用长而BigInteger不是长。


public static BigInteger convert(int[] arr) {

    // reserve required space for internal array

    StringBuilder buf = new StringBuilder(arr.length);


    for (int digit : arr)

        buf.append(digit);


    // create it only once

    return new BigInteger(buf.toString());

}


查看完整回答
反对 回复 2022-03-10
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信