`
ly5633
  • 浏览: 80665 次
社区版块
存档分类
最新评论

java用三种方法实现阶乘n!

阅读更多

  用三种方法来实现n!实现使用BigDecimal类,因为用int最多正确算到12!,用long最多正确算到20!.实现方法都比较简单,但是转换为BigDecimal实现后可能看起来有点莫名其妙。废话不多说,直接上代码:

 

  第一种方法:从1开始,一直递增乘到n,从而实现n!

 

package Factorial;

import java.math.BigDecimal;
import java.util.Scanner;
public class Factorial1 {
	public static BigDecimal factorial(int n){ 
		BigDecimal result = new BigDecimal(1);
		BigDecimal a;
		for(int i = 2; i <= n; i++){
			a = new BigDecimal(i);//将i转换为BigDecimal类型
			result = result.multiply(a);//不用result*a,因为BigDecimal类型没有定义*操作
		}
		return result;
	}
	
	public static void main(String[] arguments){
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();//读取控制台输入的整数
		System.out.println(a + "!=" + factorial(a));
	}

}

 

  第二种方法:从n开始,一直递减乘到2,从而实现n!

 

 

package Factorial;

import java.math.BigDecimal;
import java.util.Scanner;
public class Factorial3 {
	public static BigDecimal factorial(BigDecimal n){
		BigDecimal bd1 = new BigDecimal(1);//BigDecimal类型的1
		BigDecimal bd2 = new BigDecimal(2);//BigDecimal类型的2
		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;
	}
	public static void main(String[] arguments){
		Scanner sc = new Scanner(System.in);
		BigDecimal  n = sc.nextBigDecimal();
		
		System.out.print(n + "!=" + factorial(n));
	}

}
 

 第三种方法,用递归实现:f(n)=n*f(n-1),f(1)=1,递归相乘,从而实现n!

 

 

package Factorial;

import java.util.Scanner;
import java.math.BigDecimal;
public class Factorial2 {
	public static BigDecimal factorial(BigDecimal n){
		BigDecimal bd1 = new BigDecimal(1);//1
		if(n.equals(new BigDecimal(1))){
			return bd1;
		}
		else
			return n.multiply(factorial(n.subtract(bd1)));//n*f(n-1)
	}
	public static void main(String[] arguments){
		Scanner sc = new Scanner(System.in);
		BigDecimal a = sc.nextBigDecimal();
		BigDecimal result = factorial(a);	
		System.out.println(a + "!=" +result);
		
	}

}

 

1
2
分享到:
评论

相关推荐

    用java实现阶乘三种方法

    以上就是三种使用Java实现阶乘的方法,递归、循环和动态规划各有特点。递归简洁直观,但可能导致栈溢出;循环实现避免了溢出,适用于大部分情况;而动态规划则更适合于需要减少重复计算的复杂问题。理解并掌握这些...

    JAVA求N的阶乘

    阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号...自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。 亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

    java递归实现 阶乘

    在这个实例中,我们将深入探讨如何使用Java递归实现阶乘计算,并以1到10的数字为例进行演示。 阶乘是一个数学概念,表示一个正整数n的所有小于等于n的正整数的乘积,通常表示为n!。例如,5的阶乘(5!)是5 × 4 × ...

    用java实现10000的阶乘(2种方法)

    本文将深入探讨如何使用Java语言实现计算10000的阶乘,我们将讨论两种不同的方法,每种方法都有其特定的时间复杂度和效率。 ### 方法一:递归计算 递归是最直观的解决阶乘问题的方法。基本思路是定义一个函数,...

    java 求任意一个正数的阶乘

    在Java中,我们可以使用循环或递归的方式来实现求解任意正整数的阶乘。本篇文章将详细探讨如何用Java来计算阶乘。 首先,我们需要理解阶乘的概念。阶乘是一个正整数n与小于它的所有正整数的乘积,表示为n!。例如,5...

    java源代码--阶乘的计算

    在Java编程语言中,阶乘(Factorial)是一种常见的数学运算,它表示一个正整数的所有小于等于它的正整数的乘积。例如,5的阶乘(写作5!)是1 * 2 * 3 * 4 * 5 = 120。在给定的Java源代码中,实现了一个简单的阶乘...

    使用递归计算阶乘

    java中使用递归方法计算阶乘的代码示例

    JAVA实现1到10的阶乘 ............

    ### JAVA实现1到10的阶乘 #### 知识点概述 本篇文章将详细介绍如何在Java编程语言中实现计算1到10的阶乘,并对给出的代码进行解析,帮助读者理解其工作原理以及相关的Java基础知识。 #### Java基础知识回顾 在...

    java阶乘应用小程序

    在JAVA中,我们可以使用两种主要方法来计算阶乘:递归和循环。 1. **递归方法**: 递归是函数调用自身的过程。在计算阶乘时,我们可以定义一个函数,如`factorial(n)`,它根据以下规则工作: - 如果n等于1或0,...

    AS3实现阶乘计算

    java中阶乘计算常见,在flash中其实差不多,AS3实现5!等阶乘结果~~

    java语言编写的1000以内的阶乘

    除了循环,还可以使用递归的方式来实现阶乘计算,但需要注意递归深度可能导致的栈溢出问题。对于1000!这样的大数,建议使用循环避免递归带来的额外开销。 在压缩包中的`1000.txt`文件可能包含了上述Java代码的输出...

    java中的1到20的阶乘

    在Java编程语言中,实现1到20的阶乘是一个典型的编程练习,可以帮助初学者理解循环结构、变量声明以及简单的数学运算。本篇文章将详细介绍如何在Java中计算1到20的阶乘,并深入探讨其中涉及的重要概念和技术细节。 ...

    求某个数的阶乘java代码

    根据提供的信息,这里是一个使用循环实现阶乘计算的Java代码示例: ```java public class Factorial { public static void main(String[] args) { int num = 20; long factorial = calculateFactorial(num); ...

    数据结构实习之n(n≥20)的阶乘

    1. **大数处理**:由于n(n≥20)的阶乘结果超出了普通整型或长整型的表示范围,所以需要使用大数库或者自定义的数据结构来处理。例如,可以使用Python的`decimal`模块或`numpy`库,Java的`BigInteger`类,或者C++的`...

    Java计算阶乘 源代码

    本项目提供的"Java计算阶乘 源代码"旨在帮助我们实现任意整数的阶乘计算。首先,我们需要理解什么是阶乘。阶乘是将一个正整数n与小于它的所有正整数相乘的结果,表示为n!。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。...

    【java学习记录】11.多线程实现阶乘计算(Thread类和Runnable接口)

    这两种方法都可以实现阶乘计算的多线程化,主要区别在于继承`Thread`时,线程行为直接与类绑定,而实现`Runnable`接口时,线程行为是通过对象实例传递的。选择哪种方式取决于具体需求和设计考虑,例如是否需要复用类...

    n的阶乘问题--阶乘位数--阶乘末尾0的个数

    在编程实现阶乘计算时,我们可以使用循环或递归两种方法。循环方法通常更高效,因为它避免了递归带来的额外开销。以下是一个简单的Java实现: ```java public class Factorial { public static void main(String[]...

    n阶乘(n比较大时)

    一种常见的计算大数阶乘的方法是直接乘法,即从1乘到n,但这对于大数来说效率低下。递归方法虽然直观,但会很快导致栈溢出,因为每个n都需要计算(n-1)!。因此,更有效的方法是使用斯特林公式(Stirling's Formula)...

    Java阶乘求和计算范例.rar

    在本示例中,我们关注的是使用Java编程语言来实现阶乘求和的计算过程。阶乘是一个数学概念,表示一个正整数n的所有小于等于n的正整数的乘积,通常用n!表示。例如,5!(5的阶乘)等于5 * 4 * 3 * 2 * 1 = 120。这个...

    两个递归实现1!+2!+....+n!

    递归 阶乘 求和 用两个递归实现1!+2!+3!+。。。+n! 对新手有帮助!

Global site tag (gtag.js) - Google Analytics