码迷,mamicode.com
首页 > 编程语言 > 详细

Java 实现阶乘算法

时间:2015-01-30 22:22:51      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

阶乘算法如下:
以下列出 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。
package com.leo.kang.interview;

import java.math.BigDecimal;

public class Factorial {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("--------递归算法-------");
		System.out.println(factorialRecursive(20));

		System.out.println("--------循环算法-------");
		System.out.println(factorialLoop(25));
		
		System.out.println("--------BigDecimal算法-------");
		System.out.println(factorial(new BigDecimal(100)));
	}

	/**
	 * 递归实现阶乘算法
	 * 
	 * @param n
	 * @return
	 */
	public static long factorialRecursive(int n) {
		// 阶乘对整数才有意义
		if (n < 0) {
			return -1;
		}

		// 0!=1,(0 的阶乘是存在的)
		if (n == 0) {
			return 1;
		}

		if (n < 2)
			return n * 1;
		return n * factorialRecursive(n - 1);
	}

	/**
	 * 循环实现阶乘算法
	 * @param n
	 * @return
	 */
	public static long factorialLoop(int 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 factorial(BigDecimal n){  
        BigDecimal bd1 = new BigDecimal(1);//BigDecimal类型的1  
        BigDecimal bd2 = new BigDecimal(2);//BigDecimal类型的2</span><span>  
        BigDecimal result = bd1;//结果集,初值取1  
        while(n.compareTo(bd1) > 0){//参数大于1,进入循环  
            result = result.multiply(n.multiply(n.subtract(bd1)));//实现result*(n*(n-1))  
            n = n.subtract(bd2);//n-2后继续  
        }  
        return result;  
    } 

}

  

Java 实现阶乘算法

标签:

原文地址:http://www.cnblogs.com/kangyi/p/4263161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!