2013-10-05 138 views
0

我已经做了以下程序来计算在Java中使用BigInteger的n个整数的阶乘,但总是给出1作为结果。错误在哪里?因子程序没有给出正确的输出

import java.math.BigInteger; 
import java.io.*; 

class Factorial 
{ 
    public static void main(String args[]) 
    { 
     try 
     { 
      int key; 
      BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
      BigInteger result=new BigInteger("1"); 
      //take the quantity of elements for which factorial is to be calculated 
      int num=Integer.parseInt(br.readLine()); 

      while(num-->0) 
      { 
       //input the number for which factorial is to be calculated 
       key=Integer.parseInt(br.readLine()); 
       while(key>0) 
       { 
        System.out.println(key+""+result); 
        result.multiply(BigInteger.valueOf(key)); 
        key--; 
       } 
       //again make the result back to 1 for next key element 
       result=new BigInteger("1"); 
      } 
     }catch(Exception e) 
     { 
      //do nothing 
     } 
    } 
} 

回答

2

BigInteger是不可变的。的[BigIteger].mutlipy([BigInteger])结果需要被重新分配以获得所需的输出,如:

result = result.multiply(BigInteger.valueOf(key)); 

结果应在while循环执行操作之后被打印。看看这个修改后的代码:

key=Integer.parseInt(br.readLine()); 
    while(key>0){ 
     result = result.multiply(BigInteger.valueOf(key)); 
     key--; 
    } 
    System.out.println(key+" "+result); 
+0

感谢它的工作。我实际上忘了分配结果,因为你提到。 –

+0

好!别客气。 – Masudul