用三种方法来实现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);
}
}
分享到:
相关推荐
以上就是三种使用Java实现阶乘的方法,递归、循环和动态规划各有特点。递归简洁直观,但可能导致栈溢出;循环实现避免了溢出,适用于大部分情况;而动态规划则更适合于需要减少重复计算的复杂问题。理解并掌握这些...
阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号...自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。 亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
在这个实例中,我们将深入探讨如何使用Java递归实现阶乘计算,并以1到10的数字为例进行演示。 阶乘是一个数学概念,表示一个正整数n的所有小于等于n的正整数的乘积,通常表示为n!。例如,5的阶乘(5!)是5 × 4 × ...
本文将深入探讨如何使用Java语言实现计算10000的阶乘,我们将讨论两种不同的方法,每种方法都有其特定的时间复杂度和效率。 ### 方法一:递归计算 递归是最直观的解决阶乘问题的方法。基本思路是定义一个函数,...
在Java中,我们可以使用循环或递归的方式来实现求解任意正整数的阶乘。本篇文章将详细探讨如何用Java来计算阶乘。 首先,我们需要理解阶乘的概念。阶乘是一个正整数n与小于它的所有正整数的乘积,表示为n!。例如,5...
在Java编程语言中,阶乘(Factorial)是一种常见的数学运算,它表示一个正整数的所有小于等于它的正整数的乘积。例如,5的阶乘(写作5!)是1 * 2 * 3 * 4 * 5 = 120。在给定的Java源代码中,实现了一个简单的阶乘...
java中使用递归方法计算阶乘的代码示例
### JAVA实现1到10的阶乘 #### 知识点概述 本篇文章将详细介绍如何在Java编程语言中实现计算1到10的阶乘,并对给出的代码进行解析,帮助读者理解其工作原理以及相关的Java基础知识。 #### Java基础知识回顾 在...
在JAVA中,我们可以使用两种主要方法来计算阶乘:递归和循环。 1. **递归方法**: 递归是函数调用自身的过程。在计算阶乘时,我们可以定义一个函数,如`factorial(n)`,它根据以下规则工作: - 如果n等于1或0,...
java中阶乘计算常见,在flash中其实差不多,AS3实现5!等阶乘结果~~
除了循环,还可以使用递归的方式来实现阶乘计算,但需要注意递归深度可能导致的栈溢出问题。对于1000!这样的大数,建议使用循环避免递归带来的额外开销。 在压缩包中的`1000.txt`文件可能包含了上述Java代码的输出...
在Java编程语言中,实现1到20的阶乘是一个典型的编程练习,可以帮助初学者理解循环结构、变量声明以及简单的数学运算。本篇文章将详细介绍如何在Java中计算1到20的阶乘,并深入探讨其中涉及的重要概念和技术细节。 ...
根据提供的信息,这里是一个使用循环实现阶乘计算的Java代码示例: ```java public class Factorial { public static void main(String[] args) { int num = 20; long factorial = calculateFactorial(num); ...
1. **大数处理**:由于n(n≥20)的阶乘结果超出了普通整型或长整型的表示范围,所以需要使用大数库或者自定义的数据结构来处理。例如,可以使用Python的`decimal`模块或`numpy`库,Java的`BigInteger`类,或者C++的`...
本项目提供的"Java计算阶乘 源代码"旨在帮助我们实现任意整数的阶乘计算。首先,我们需要理解什么是阶乘。阶乘是将一个正整数n与小于它的所有正整数相乘的结果,表示为n!。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。...
这两种方法都可以实现阶乘计算的多线程化,主要区别在于继承`Thread`时,线程行为直接与类绑定,而实现`Runnable`接口时,线程行为是通过对象实例传递的。选择哪种方式取决于具体需求和设计考虑,例如是否需要复用类...
在编程实现阶乘计算时,我们可以使用循环或递归两种方法。循环方法通常更高效,因为它避免了递归带来的额外开销。以下是一个简单的Java实现: ```java public class Factorial { public static void main(String[]...
一种常见的计算大数阶乘的方法是直接乘法,即从1乘到n,但这对于大数来说效率低下。递归方法虽然直观,但会很快导致栈溢出,因为每个n都需要计算(n-1)!。因此,更有效的方法是使用斯特林公式(Stirling's Formula)...
在本示例中,我们关注的是使用Java编程语言来实现阶乘求和的计算过程。阶乘是一个数学概念,表示一个正整数n的所有小于等于n的正整数的乘积,通常用n!表示。例如,5!(5的阶乘)等于5 * 4 * 3 * 2 * 1 = 120。这个...
递归 阶乘 求和 用两个递归实现1!+2!+3!+。。。+n! 对新手有帮助!