问题是10 18超出了Java的范围int
,它存储的数字最多为2 31 -1,或大约2*10 9.您可以通过使用扩展程序的范围long
在地方int
接受数高达9*10 18,或使其通过接受几乎无限的范围BigInteger
:
BigInteger n = new BigInteger(numericString); BigInteger test = n.and(n.subtract(BigInteger.ONE)); if (test.equals(BigInteger.ZERO)) { ... }