Java中数字数组转整数9位正常10位输出错误如何解决
问题原因
Java中int是32位有符号整数,取值范围为-2^31到2^31-1(也就是-2147483648到2147483647)。你期望得到的结果9876543211远大于int的最大值,发生了整数溢出,所以输出了错误的结果。9位的987654321小于int最大值,因此可以正常输出。
修复方案
方案1:使用long类型存储结果(适用于位数≤18位的场景)
long是64位有符号整数,最大值为9223372036854775807,足够容纳10位的目标结果,修改后的代码如下:
public class practice { public static void main(String[] args) { int digits[] = {9,8,7,6,5,4,3,2,1,1}; long j = 1; long sum = 0; for (int i = digits.length-1; i >= 0; i--) { sum = sum + digits[i] * j; j = j * 10; } System.out.print(sum); } }
方案2:使用BigInteger存储结果(无位数限制)
如果转换的数字位数超过18位,超出long的取值范围,可以使用Java提供的大整数类BigInteger实现,修改后的代码如下:
import java.math.BigInteger; public class practice { public static void main(String[] args) { int digits[] = {9,8,7,6,5,4,3,2,1,1}; BigInteger sum = BigInteger.ZERO; BigInteger j = BigInteger.ONE; for (int i = digits.length-1; i >= 0; i--) { sum = sum.add(BigInteger.valueOf(digits[i]).multiply(j)); j = j.multiply(BigInteger.TEN); } System.out.print(sum); } }
内容的提问来源于stack exchange,提问作者alpha-
相关产品推荐
相关产品推荐

