java 阶乘算法_Java 实现阶乘算法Java中@

Java 实现阶乘算法

阶乘算法如下:

以下列出 0 至 20 的阶乘:

0!=1,0 的阶乘是存在的)

1!=1,

2!=2,

3!=6,

4!=24,

5!=120,

6!=720,

7!=5040,

8!=40320

9!=362880

10!=3628800

11!=39916800

12!=479001600

13!=6227020800

14!=87178291200

15!=1307674368000

16!=20922789888000

17!=355687428096000

18!=6402373705728000

19!=121645100408832000

20!=2432902008176640000

而当 n≥5 时,n!的个位数字都是0。

java代码实现

package com.leo.kang.interview;

import java.math.BigDecimal;

public class Factorial {

/**

* @param args

*/

public static void mainString[] args) {

// TODO Auto-generated method stub

System.out.println“——–递归算法——-“);

System.out.printlnfactorialRecursive20));

System.out.println“——–循环算法——-“);

System.out.printlnfactorialLoop25));

System.out.println“——–BigDecimal算法——-“);

System.out.printlnfactorialnew BigDecimal100)));

}

/**

* 递归实现阶乘算法

*

* @param n

* @return

*/

public static long factorialRecursiveint n) {

// 阶乘对整数才有意义

if n < 0) {

return -1;

}

// 0!=1,0 的阶乘是存在的)

if n == 0) {

return 1;

}

if n < 2)

return n * 1;

return n * factorialRecursiven – 1);

}

/**

* 循环实现阶乘算法

* @param n

* @return

*/

public static long factorialLoopint n) {

// 阶乘对整数才有意义

if n < 0) {

return -1;

}

// 0!=1,0 的阶乘是存在的)

if n == 0) {

return 1;

}

// 初始值必须为1才有意义

long result = 1;

for int i = n; i > 0; i–) {

result *= i;

}

return result;

}

public static BigDecimal factorialBigDecimal n){

BigDecimal bd1 = new BigDecimal1);//BigDecimal类型的1

BigDecimal bd2 = new BigDecimal2);//BigDecimal类型的2

BigDecimal result = bd1;//结果集,初值取1

whilen.compareTobd1) > 0){//参数大于1,进入循环

result = result.multiplyn.multiplyn.subtractbd1)));//实现result*n*n-1))

n = n.subtractbd2);//n-2后继续

}

return result;

}

}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注