在for循环条件中使用BigInteger不起作用。我该怎么办?

时间:2012-04-30 08:20:32

标签: java loops biginteger

另一个BigInteger问题。我的代码适用于int和long,但由于UVa中的测试用例较大,我需要使用BigInteger。但我不知道如何使用BigInteger,它让我疯了!代码甚至不进入for循环。它似乎陷入了条件部分。 我尝试使用for或while,他们也有同样的问题。

public class Main{
  public static void main(String[] asdf){
    Scanner pp = new Scanner(System.in);
    int testCases = pp.nextInt();
    while(testCases-- > 0){
      //BigInteger a = pp.nextBigInteger();
      BigInteger low = pp.nextBigInteger();
      BigInteger upp = pp.nextBigInteger();
      BigInteger  max = BigInteger.ZERO;
      BigInteger i = low;
      //((i.compareTo(upp)==-1)||
      //(i.compareTo(upp)==0));
      //i.add(BigInteger.ONE))
      while((i.compareTo(upp))<0){
        if(divCount(i).compareTo(divCount(max))==1){
          max = i;
        }
        i.add(BigInteger.ONE);
      }
      System.out.println("Between "+low+" and "+upp+", "+max+" has a maximum of "+divCount(max)+" divisors.");
    }
  }
  public static BigInteger divCount(BigInteger n){
    BigInteger lim = n;
    BigInteger size = BigInteger.ZERO;
    BigInteger i = BigInteger.ONE; 
    while(i.compareTo(lim)<0){
      if((n.mod(i).compareTo(BigInteger.ZERO))==0){
        lim = n.divide(i);
        if(!(lim.equals(i))){
          size.add(BigInteger.ONE);
        }
        size.add(BigInteger.ONE);
      }
      i.add(BigInteger.ONE);
    }
    //return size;
    return BigInteger.ONE;
  }
}

1 个答案:

答案 0 :(得分:7)

i.add(BigInteger.ONE)不会修改i。相反,它返回一个新对象。将值分配给i以获得所需的效果。对于代码中的其他类似调用也是如此。