循环BigInteger数字java

问题描述

我正在使用下面的代码来查找完美平方数字,但不能做像 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...