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. public static void main(String[] arguments){
  37. Scanner sc = new Scanner(System.in);
  38. int a = sc.nextInt();
  39. System.out.println(a + "!=" + factorial(a));
  40. }
  41. }
复制代码

第二种方法:

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. System.out.print(n + "!=" + factorial(n));
  19. }
  20. }

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

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.}