问题描述
我正在使用下面的代码来查找完美平方数字,但不能做像 BigInteger
这样的大数字,另一个问题是我无法创建完美的平方数循环
Scanner in = new Scanner(system.in);
int q = in.nextInt();
BigInteger[] l = new BigInteger[q];
BigInteger[] r = new BigInteger[q];
int[] num = new int[q];
for (int i = 0; i < q; i++) {
l[i] = in.nextBigInteger();
r[i] = in.nextBigInteger();
num[i]=0;
for (BigInteger j = l[i]; j.compareto(r[i]) > 0; j.add(BigInteger.ONE)) {
**This loop doesn't work**
}
}
解决方法
这里有两个问题。首先,假设 j
开始时小于 r[i]
,您将条件颠倒 - 只要它更小,j.compareTo(r[i]
将返回一个小于零,不大于零的值.其次,add
不会修改 BigInteger
实例,它返回一个新的 BigInteger
和加法结果(即,您可以将其视为 +
运算符,而不是 +=
运算符)。
简而言之,这就是你的循环应该是什么样子:
for (BigInteger j = l[i]; j.compareTo(r[i]) < 0; j = j.add(BigInteger.ONE)) {
// Code goes here...