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

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求N的阶乘

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

    使用递归计算阶乘

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

    AS3实现阶乘计算

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

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

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

    java阶乘应用小程序

    用JAVA实现 1到20阶乘的和 方便初学者

    编写一个JSP程序,计算整数的阶乘,并显示出结果。(已多次完善)

    功能:通过表单提交一个正整数,然后计算它的阶乘。...方法:先声明计算阶乘的方法,再调用该方法,最后在页面上输出结果。其中要对提交的是否为整数作判断,是整数则进行阶乘计算,不是整数则要求重新提交。

    50个必会的数据结构及算法实现源码

    问题:编程实现求阶乘n! 排序 问题:实现归并排序、快速排序、插入排序、冒泡排序、选择排序 问题:编程实现O(n)时间复杂度内找到一组数据的第K大元素 二分查找、散列表、字符串处理、二叉树、堆、图、回溯、分治...

    java课程实验

    其中一个使用递归计算n的阶乘,一个使用非递归计算n的阶乘。构造main方法进行测试。 3、按照要求使用Java进行编码。 1) 设计一个教师类Teacher,属性有编号(no)、姓名(name)、年龄(age)、所属学院(seminary)...

    Java期末复习题编程题(47道)和选择题(30道) 包括异常处理和接口以及普通编程题

    编写一个Java程序,计算并输出斐波那契数列的前 n 个数字,其中 n 是用户从键盘输入的整数。 编写一个Java程序,计算并输出给定整数的阶乘。 编写一个Java程序,从键盘读取一个字符串,然后反转字符串并输出结果。 ...

    DiGuiDemo.zip_斐波那契_斐波那契数列_递归_递归求阶乘

    java递归实现斐波那契数列,实现n阶乘,实现1+2+3+...+n求和

    java课程设计-计算器-功能完整的科学计算器-仿windows计算器

    乘 "/",除 "x^y",x的y次方 "Mod",取模 "And",相与 "Or",相或 "Xor",异或 "Lsh",左移 "Rsh",右移 "sqrt",开根号 "%",取百分数 "1/X",求倒数 正弦余弦函数:"sin", "cos", "tan", 对数函数:"ln", "log",阶乘: "n!...

    java计算器课程设计

    1.掌握JAVA语言编程的基础知识并能熟练运用。 2.学习使用Eclipse编写调试程序。 3.熟悉类的声明与对象的使用。 4.理解委托事件处理模型。 5.熟悉使用接口。 6.了解JAVA语言的图形用户界面JAVA SWING的设计知识...

    15个典型的递归算法的JAVA实现

    15个典型的递归算法的JAVA实现,求N的阶乘、欧几里德算法(求最大公约数)、斐波那契数列、汉诺塔问题、树的三种递归遍历方式、快速排序、折半查找、图的遍历、归并排序、八皇后问题(回溯、递归)、棋盘覆盖(分治,...

    java阶乘计算获得结果末尾0的个数代码实现

    今天偶然看到一个要求,求1000~10000之间的数n的阶乘并计算所得的数n!末尾有多少个0?要求: 不计算 只要得到末尾有多少个0就可以了,看下面的代码吧

    Android studio中实现输入一个整数N,输出1+2+3+...+N的求和结果

    本专辑为您列举一些(含源码)方面的下载的内容资源。把最新最全的(含源码)推荐给您,让您轻松找到相关应用信息,并提供(含源码)下载等功能。本站致力于为用户提供更好的下载体验,如有最新(含源码)相关资源信息会推送给...

    java模拟科学计算器课程设计.doc

    其目的在于通过实践加深学生对面向对象程序" "设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方" "法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高自身的应用能" "力...

    java模拟科学计算器课程设计(1).doc

    其目的在于通过实践加深学生对面向对象程序" "设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方" "法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高自身的应用能" "力...

    java范例开发大全源代码

     实例163 使用抽象方法实现的支票夹 254  9.2 封装 257  实例164 世界小姐参赛资格 257  实例165 自定义复数类 261  9.3 继承 264  实例166 轿车与本田的关系 264  实例167 继承关系的加载顺序 ...

    java范例开发大全

    实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛资格 257 实例165 自定义复数类 261 9.3 继承 264 实例166 轿车与本田的关系 264 实例167 继承关系的加载顺序 266 实例168 如何访问同名的...

    Java范例开发大全 (源程序)

     实例163 使用抽象方法实现的支票夹 254  9.2 封装 257  实例164 世界小姐参赛资格 257  实例165 自定义复数类 261  9.3 继承 264  实例166 轿车与本田的关系 264  实例167 继承关系的加载顺序 266  ...

Global site tag (gtag.js) - Google Analytics