2012-05-28 83 views
2

我正在嘗試使用遞歸和BigIntegers的因子,但eclipse正在抱怨BigInteger。我知道這個節目應該很簡單,但它讓我很頭疼。這是代碼。BigInteger難度

import java.util.Scanner; 
import java.math.BigInteger; 

public class Factorial 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter integer"); 
     BigInteger n = input.nextBigInteger(); 
     System.out.println("Factorial of " + n + " is " + fact(n)); 

    } 

    public static int fact(BigInteger n) 
    { 
     if(n ==0) 
     { 
      return 1; 
     } 
     else 
     { 
      return n * fact(n-1); 
     } 
    } 
} 

回答

10

BigInteger不支持使用*使用==和乘法比較。相反,您必須調用BigInteger類的適當方法(equals()multipy())。

另請注意,存在BigInteger.ZEROBigInteger.ONE

最後,您fact方法的返回類型BigInteger而不是int。是否要參數BigIntegerint類型取決於您。

+0

好吧歡呼隊友! – user815693

+1

另外,您的'factorial'方法應該可以接受'int'並返回'BigInteger',而不是相反。 –

1

我相信你不能簡單地使用算術運算符到BigInteger對象上。嘗試使用他們的方法運算過程,如比較,減,乘等

參考文獻中給出here

3

Java不支持操作符重載。所以+和==不能被用戶定義的類支持,只有一個例外是java.lang.String支持+。

4

除了@aix提到的有關在BigInteger上調用算法的內容 - 我還可以看到此代碼的另一個問題。

你的方法簽名是

public static int fact(BigInteger n) 

這是problemantic - 析因生長快,所以你很可能溢出的結果。
認爲你真的想要的是:

public static BigInteger fact(int n) 

這更有道理,因爲返回值可能應該是BigInteger(因爲它生長速度快),而不是參數,或者可能 - 兩者他們。