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));
}
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("")));
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());
}
添加回答
举报