BigInteger总是0

时间:2015-05-07 09:31:35

标签: java add biginteger factorial

我有以下问题:当尝试添加BigIntegers的总和时,结果仍为0。

以下是代码:

 public void NumberOfOutcomes(int x, int y){
   BigInteger first = BigInteger.valueOf(0);
   BigInteger second = BigInteger.valueOf(0);
   for(int i = 0; i <= (x / 2); i++){
       first.add( fac(x - i).divide((fac(x - 2*i).multiply(fac(i)))) );
       System.out.println("First " + first.add( fac(x - i).divide((fac(x - 2*i).multiply(fac(i)))) ));
    }

   for(int i = 0; i <= (y / 2); i++){
       second.add( fac(y - i).divide((fac(y - 2*i).multiply(fac(i)))) );
       System.out.println("Second " + second.add( fac(y - i).divide((fac(y - 2*i).multiply(fac(i)))) ));
    } 
   System.out.println("First " + first);
   System.out.println("Second " + second);
   System.out.println(first.multiply(second));
   }

此处fac是阶乘函数。

以下是终端上的内容:

  

points1.NumberOfOutcomes(2,3)
  第1页   第1页   第二个1   第二个2   首先0
  第二个0   0

2 个答案:

答案 0 :(得分:17)

这是因为BigInteger 不可变,这意味着它的值不会改变。因此,first.add(x)会创建包含计算结果的新 BigInteger,即只需将结果重新分配给第一个,例如first = first.add(...)

答案 1 :(得分:1)

add类的BigInteger方法返回操作数和已存储在对象本身中的值的总和。但它不会将结果存储在对象中(第一个或第二个)。 它的工作方式与

相同
first += value;    

实际上,你必须让它看起来像这样:

first = first.add(value);