在Java中使用大整数作为while循环的条件

在Java中使用大整数作为while循环的条件,java,Java,我想在while循环条件中使用一个大的整数值,但这不起作用 import java.util.Scanner; import java.util.StringTokenizer; public class NiceProbelm2 { public static void main(String[]args){ Scanner input = new Scanner(System.in); String number = input.nextLine(); StringT

我想在while循环条件中使用一个大的整数值,但这不起作用

import java.util.Scanner;
import java.util.StringTokenizer;
public class NiceProbelm2 {
public static void main(String[]args){
    Scanner input = new Scanner(System.in);
    String number = input.nextLine();
    StringTokenizer st = new StringTokenizer(number);
    BigInteger base = null;
    int power=0;
    while (st.hasMoreTokens()) {
          String token1 = st.nextToken();
          String token2 = st.nextToken();
          base = new BigInteger(token1);
          power = Integer.parseInt(token2);


        }

        BigInteger result = base.pow(power);
        //long fresult = (long)result;
        BigInteger div = new BigInteger("10");
        System.out.println(result);
        BigInteger sum=null;
     //NOt working while(result.compareTo(new BigInteger("0")) > 10 )
                    {
        BigInteger digit = result.mod(div);
        result = result.divide(div);
        sum = sum.add(digit);

    }
     System.out.println(sum);
}

}

绝不能将的返回值与0以外的任何值进行比较。(更具体一点,但同样的规则仍然适用)


您可以检查它是否大于0、小于0或等于0。只有这3条信息才是真正相关的。实际值(如果返回1、10或100)无关紧要。

您必须使用以下条件:

result.compareTo(BigInteger.ZERO) > 0

看起来您想在(result!=0)编写时执行

while(result.compareTo(biginger.ZERO)!=0)


此外,您还需要将
sum
初始化为
biginger.ZERO

我认为以前的解决方案存在的问题是,由于累加器未初始化而抛出了空指针。以下代码生成您要查找的结果:

        BigInteger result = base.pow(power);
        BigInteger div = new BigInteger("10");
        System.out.println(result);
//The following line is different, initialize the sum before using it.
        BigInteger sum = BigInteger.ZERO;
        while(!BigInteger.ZERO.equals(result)) {
            BigInteger digit = result.mod(div);
            result = result.divide(div);
            sum = sum.add(digit);
        }
        System.out.println(sum);
我还想指出,BigInteger有一个方法,它可以从一个除法中同时提供商和余数,这比分别提供商和余数更有效,并且BigInteger有一个“valueOf”方法,因此您可以使用数值文本而不是字符串:

    BigInteger result = base.pow(power);
    BigInteger div = BigInteger.valueOf(10);
    System.out.println(result);

    //Initialize the sum to zero
    BigInteger sum = BigInteger.ZERO;        
    //While the result has a non-zero decimal digit
    while(!BigInteger.ZERO.equals(result)) {
        //this divides by ten (first element),
        //and calculates the remainder (second element)
        BigInteger[] lastDigit = result.divideAndRemainder(div);
        result = lastDigit[0];
        sum = sum.add(lastDigit[1]);

    }
    System.out.println(sum);

你能给我们一些输入、输出和预期结果的样本吗。如果不知道问题是什么,很难看出问题是什么。:)输入:1234567 8输出:53965637613183939406660689603780554533710504641输出:以上所有数字的总和等于217您需要告诉我们实际得到的输出!让我再次澄清一下:输入示例:1234567 8程序将计算1234567^8,返回5396563761318393940626606860689603780554533710504641。我想抓住这个长数字中的每一个数字,把它们加起来。这对于整数和双精度是可能的,但对于大整数是不可能的。正确的输出应该是217。谢谢你的建议,但以上都不起作用。我想做的是,当我取一个数的幂时,例如1234567^8给了我一个很长的数,所以我取这个数的模,这样我就可以一个接一个地得到数字,然后把它们相加。你上面的建议给了我和以前一样的结果。涉及大整数参数的while循环没有执行。非常感谢您是专家。我也会考虑其他的建议。