用三种方法来实现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);
}
}
分享到:
相关推荐
阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号...自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。 亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
java中使用递归方法计算阶乘的代码示例
java中阶乘计算常见,在flash中其实差不多,AS3实现5!等阶乘结果~~
递归 阶乘 求和 用两个递归实现1!+2!+3!+。。。+n! 对新手有帮助!
用JAVA实现 1到20阶乘的和 方便初学者
功能:通过表单提交一个正整数,然后计算它的阶乘。...方法:先声明计算阶乘的方法,再调用该方法,最后在页面上输出结果。其中要对提交的是否为整数作判断,是整数则进行阶乘计算,不是整数则要求重新提交。
问题:编程实现求阶乘n! 排序 问题:实现归并排序、快速排序、插入排序、冒泡排序、选择排序 问题:编程实现O(n)时间复杂度内找到一组数据的第K大元素 二分查找、散列表、字符串处理、二叉树、堆、图、回溯、分治...
其中一个使用递归计算n的阶乘,一个使用非递归计算n的阶乘。构造main方法进行测试。 3、按照要求使用Java进行编码。 1) 设计一个教师类Teacher,属性有编号(no)、姓名(name)、年龄(age)、所属学院(seminary)...
编写一个Java程序,计算并输出斐波那契数列的前 n 个数字,其中 n 是用户从键盘输入的整数。 编写一个Java程序,计算并输出给定整数的阶乘。 编写一个Java程序,从键盘读取一个字符串,然后反转字符串并输出结果。 ...
java递归实现斐波那契数列,实现n阶乘,实现1+2+3+...+n求和
乘 "/",除 "x^y",x的y次方 "Mod",取模 "And",相与 "Or",相或 "Xor",异或 "Lsh",左移 "Rsh",右移 "sqrt",开根号 "%",取百分数 "1/X",求倒数 正弦余弦函数:"sin", "cos", "tan", 对数函数:"ln", "log",阶乘: "n!...
1.掌握JAVA语言编程的基础知识并能熟练运用。 2.学习使用Eclipse编写调试程序。 3.熟悉类的声明与对象的使用。 4.理解委托事件处理模型。 5.熟悉使用接口。 6.了解JAVA语言的图形用户界面JAVA SWING的设计知识...
15个典型的递归算法的JAVA实现,求N的阶乘、欧几里德算法(求最大公约数)、斐波那契数列、汉诺塔问题、树的三种递归遍历方式、快速排序、折半查找、图的遍历、归并排序、八皇后问题(回溯、递归)、棋盘覆盖(分治,...
今天偶然看到一个要求,求1000~10000之间的数n的阶乘并计算所得的数n!末尾有多少个0?要求: 不计算 只要得到末尾有多少个0就可以了,看下面的代码吧
本专辑为您列举一些(含源码)方面的下载的内容资源。把最新最全的(含源码)推荐给您,让您轻松找到相关应用信息,并提供(含源码)下载等功能。本站致力于为用户提供更好的下载体验,如有最新(含源码)相关资源信息会推送给...
其目的在于通过实践加深学生对面向对象程序" "设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方" "法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高自身的应用能" "力...
其目的在于通过实践加深学生对面向对象程序" "设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方" "法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高自身的应用能" "力...
实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛资格 257 实例165 自定义复数类 261 9.3 继承 264 实例166 轿车与本田的关系 264 实例167 继承关系的加载顺序 ...
实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛资格 257 实例165 自定义复数类 261 9.3 继承 264 实例166 轿车与本田的关系 264 实例167 继承关系的加载顺序 266 实例168 如何访问同名的...
实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛资格 257 实例165 自定义复数类 261 9.3 继承 264 实例166 轿车与本田的关系 264 实例167 继承关系的加载顺序 266 ...