java中四種階乘的計算


package  com.zf.s2; //創建一個包
 
import  java.math.BigInteger; //導入類
import  java.util.ArrayList;
import  java.util.List;
 
public  class  TextFactorial { //操作計算階乘的類
     public  static  int  simpleCircle( int  num){ //簡單的循環計算的階乘
         int  sum= 1 ;
         if (num< 0 ){ //判斷傳入數是否為負數
             throw  new  IllegalArgumentException( "必須為正整數!" ); //拋出不合理參數異常
         }
         for ( int  i= 1 ;i<=num;i++){ //循環num
             sum *= i; //每循環一次進行乘法運算
         }
         return  sum; //返回階乘的值
     }
     public  static  int  recursion( int  num){ //利用遞歸計算階乘
         int  sum= 1 ;
         if (num <  0 )
             throw  new  IllegalArgumentException( "必須為正整數!" ); //拋出不合理參數異常
         if (num== 1 ){
             return  1 ; //根據條件,跳出循環
         } else {
             sum=num * recursion(num- 1 ); //運用遞歸計算
             return  sum;
         }
     }
     public  static  long  addArray( int  num){ //數組添加計算階乘
         long []arr= new  long [ 21 ]; //創建數組
         arr[ 0 ]= 1 ;
         
         int  last= 0 ;
         if (num>=arr.length){
             throw  new  IllegalArgumentException( "傳入的值太大" ); //拋出傳入的數太大異常
         }
         if (num <  0 )
             throw  new  IllegalArgumentException( "必須為正整數!" ); //拋出不合理參數異常
         while (last<num){ //建立滿足小於傳入數的while循環
             arr[last+ 1 ]=arr[last]*(last+ 1 ); //進行運算
             last++; //last先進行運算,再將last的值加1
         }
         return   arr[num];
     }
     public  static  synchronized  BigInteger bigNumber( int  num){ //利用BigInteger類計算階乘
 
             ArrayList list =  new  ArrayList(); //創建集合數組
             list.add(BigInteger.valueOf( 1 )); //往數組里添加一個數值
             for  ( int  i = list.size(); i <= num; i++) {
                 BigInteger lastfact = (BigInteger) list.get(i -  1 ); //獲得第一個元素
                 BigInteger nextfact = lastfact.multiply(BigInteger.valueOf(i)); //獲得下一個數組
                 list.add(nextfact);
             }
             return  (BigInteger) list.get(num); //返回數組中的下標為num的值
 
     }
 
     public  static  void  main(String []args){ //java程序的主入口處
         int  num= 5 ;
         int  num1= 23 ;
         System.out.println( "簡單的循環計算" +num+ "的階乘為" //調用simpleCircle
                 +simpleCircle(num));
         System.out.println( "利用遞歸計算" +num+ "的階乘為" //調用recursion
                 +recursion(num));
         System.out.println( "數組添加計算" +num+ "的階乘為" //調用addArray
                 +addArray(num));
         System.out.println( "利用BigInteger類計算" +num1+ "的階乘為" //調用bigNumber
                 +bigNumber(num1));
         
     }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM