java 实现阶乘 三种方法

用三种方法来实现n!实现使用BigDecimal类,因为用int最多正确算到12!,用long最多正确算到20!.废话不多说,直接上代码:

//第一种方法:

Java代码

  1. 1.package Factorial;   
  2. 2.  
  3. 3.import java.math.BigDecimal;   
  4. 4.import java.util.Scanner;   
  5. 5.public class Factorial1 {   
  6. 6.    public static BigDecimal factorial(int n){   
  7. 7.        BigDecimal result = new BigDecimal(1);   
  8. 8.        BigDecimal a;   
  9. 9.        for(int i = 2; i <= n; i++){   
  10. 10.            a = new BigDecimal(i);   
  11. 11.            result = result.multiply(a);   
  12. 12.        }   
  13. 13.        return result;   
  14. 14.    }   
  15. 15.      
  16. 16.    public static void main(String[] arguments){   
  17. 17.        Scanner sc = new Scanner(System.in);   
  18. 18.        int a = sc.nextInt();   
  19. 19.        System.out.println(a + "!=" + factorial(a));   
  20. 20.    }   
  21. 21.  
  22. 22.}  
  23. package Factorial;

  24. import java.math.BigDecimal;
  25. import java.util.Scanner;
  26. public class Factorial1 {
  27.         public static BigDecimal factorial(int n){
  28.                 BigDecimal result = new BigDecimal(1);
  29.                 BigDecimal a;
  30.                 for(int i = 2; i <= n; i++){
  31.                         a = new BigDecimal(i);
  32.                         result = result.multiply(a);
  33.                 }
  34.                 return result;
  35.         }
  36.        
  37.         public static void main(String[] arguments){
  38.                 Scanner sc = new Scanner(System.in);
  39.                 int a = sc.nextInt();
  40.                 System.out.println(a + "!=" + factorial(a));
  41.         }

  42. }
复制代码

第二种方法:





Java代码

  1. 1.//第二种方法   
  2. 2.package Factorial;   
  3. 3.  
  4. 4.import java.math.BigDecimal;   
  5. 5.import java.util.Scanner;   
  6. 6.public class Factorial3 {   
  7. 7.    public static BigDecimal factorial(BigDecimal n){   
  8. 8.        BigDecimal bd1 = new BigDecimal(1);   
  9. 9.        BigDecimal bd2 = new BigDecimal(2);   
  10. 10.        BigDecimal result = bd1;   
  11. 11.        while(n.compareTo(bd1) > 0){   
  12. 12.            result = result.multiply(n.multiply(n.subtract(bd1)));   
  13. 13.            n = n.subtract(bd2);   
  14. 14.        }   
  15. 15.        return result;   
  16. 16.    }   
  17. 17.    public static void main(String[] arguments){   
  18. 18.        Scanner sc = new Scanner(System.in);   
  19. 19.        BigDecimal  n = sc.nextBigDecimal();   
  20. 20.           
  21. 21.        System.out.print(n + "!=" + factorial(n));   
  22. 22.    }   
  23. 23.  
  24. 24.}  

//第二种方法

  1. package Factorial;

  2. import java.math.BigDecimal;
  3. import java.util.Scanner;
  4. public class Factorial3 {
  5.         public static BigDecimal factorial(BigDecimal n){
  6.                 BigDecimal bd1 = new BigDecimal(1);
  7.                 BigDecimal bd2 = new BigDecimal(2);
  8.                 BigDecimal result = bd1;
  9.                 while(n.compareTo(bd1) > 0){
  10.                         result = result.multiply(n.multiply(n.subtract(bd1)));
  11.                         n = n.subtract(bd2);
  12.                 }
  13.                 return result;
  14.         }
  15.         public static void main(String[] arguments){
  16.                 Scanner sc = new Scanner(System.in);
  17.                 BigDecimal  n = sc.nextBigDecimal();
  18.                
  19.                 System.out.print(n + "!=" + factorial(n));
  20.         }

  21. }

第三种方法,用递归实现:

Java代码

    1. 1.package Factorial;   
    2. 2.  
    3. 3.import java.util.Scanner;   
    4. 4.import java.math.BigDecimal;   
    5. 5.public class Factorial2 {   
    6. 6.    public static BigDecimal factorial(BigDecimal n){   
    7. 7.        BigDecimal bd1 = new BigDecimal(1);   
    8. 8.        if(n.equals(new BigDecimal(1))){   
    9. 9.            return bd1;   
    10. 10.        }   
    11. 11.        else  
    12. 12.            return n.multiply(factorial(n.subtract(bd1)));   
    13. 13.    }   
    14. 14.    public static void main(String[] arguments){   
    15. 15.        Scanner sc = new Scanner(System.in);   
    16. 16.        BigDecimal a = sc.nextBigDecimal();   
    17. 17.        BigDecimal result = factorial(a);      
    18. 18.        System.out.println(a + "!=" +result);   
    19. 19.           
    20. 20.    }   
    21. 21.  
    22. 22.} 
posted on 2016-08-02 10:32  yanran  阅读(6109)  评论(0编辑  收藏  举报