今天,在看遞歸的時候發現1遞歸到100的階乘,結果會成0;看了下發現是内容超出了變量本身的長度。
例如:int等于4個位元組,而每個位元組又等于8位,故而得之長度為32位。
而通過1*2*3....*35的時候發現結果超出變量本身長度,導緻二進制轉換丢失多32位的資料,十進制化之後結果為0。
那麼該怎樣解決這個問題了?
我們可以同Java幫我封裝的資料類來處理溢出的問題————BigInteger
修改之前的代碼:
public static int multiply(int i){
if(i==1){
return 1;
}else{
return multiply(--i)*i;
}
}
修改之後:
public static BigInteger multiply(BigInteger i){
if(i.compareTo(new BigInteger("1"))!=1){
return new BigInteger("1");
}else{
return multiply(i.subtract(new BigInteger("1"))).multiply(i);
}
}
測試代碼:
public class Main {
public static void main(String[] args) {
System.out.println(multiply(new BigInteger("35")));
}
}
輸出結果: