java 阶乘算法_Java 实现阶乘算法

java 阶乘算法_Java 实现阶乘算法Java实现阶乘算法阶乘算法如下:以下列出0至20的阶乘:0!=1,(0的阶乘是存在的)1!=1,2!=2,3!=6,4!=24,5!=120,6!=720,7!=5040,8!=403209!=36288010!=362880011!=3991680012!=47900160013!=622702080014!=8717829120015!=130767436800016!=2092…

大家好,又见面了,我是你们的朋友全栈君。

Java 实现阶乘算法

阶乘算法如下:

以下列出 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。

java代码实现

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

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;

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163989.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java链表打印_java链表打印

    java链表打印_java链表打印链表类packagecom.demo;publicclassNode{privateStringdata;privateNodenext;publicNode(Stringdata){this.data=data;}publicStringgetData(){returndata;}publicvoidsetData(Stringdata){this.data…

  • Linux下文件系统监控神器Inotify

    Linux下文件系统监控神器Inotify

  • Java中的POJO是什么?[通俗易懂]

    Java中的POJO是什么?[通俗易懂]1.介绍在这个简短的教程中,我们将研究“普通Java对象”(PlainOldJavaObject)的定义,简称POJO。我们将看看POJO与JavaBean的比较,以及如何将POJO转换为JavaBean。2.普通java对象2.1何为普通java对象?当我们谈论POJO时,我们所描述的是一个简单的类型,没有任何特定框架的引用。POJO对我们的属性和方法没有命名约定。让我们创建一个基本的员工POJO。它将有三个属性;名字、姓氏和入职日期:publicclassEmployeePojo

  • 基于Tess4j的图片识别

    基于Tess4j的图片识别Tess4J是对TesseractOCRAPI的JavaJNA封装。tesseract是跨平台的OCR(OpticalCharacterRecognition,光学字符识别)引擎,让开发者非常容易的集成OCR能力到他们自己的应用。通过强大的API从图片中识别和提取文本内容。Tess4J支持主流的图片格式,如TIFF,JPEG,GIF,PNG,BMP,andPDF。…

  • DHT和一致性哈希算法总结

    DHT和一致性哈希算法总结 Hash算法比较重要的考量点有两个:1.单调性(新增或者减少映射节点时,尽量不影响原有映射关系)2.平衡性(尽量均匀分布) 分布式领域常见负载均衡算法:(1)取余法:%n如果有3个节点,Hash之后取模求余 Hash(x)%3,如果加一个节点,则Hash(x)%4。 这种方法带来的问题:1一个cache服务器mdown掉了(在实际应用中必…

  • MAC 更新SVN到1.8

    MAC 更新SVN到1.8

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号