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;

}

}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • FPGA实现的SPI协议(二)—-基于SPI接口的FLASH芯片M25P16的使用「建议收藏」

    FPGA实现的SPI协议(二)—-基于SPI接口的FLASH芯片M25P16的使用「建议收藏」用flash芯片M25P16来验证下SPI的具体实现吧。

    2022年10月15日
    3
  • iframe嵌套页面拒绝访问_苹果cms模板修改导航

    iframe嵌套页面拒绝访问_苹果cms模板修改导航网站底部友链,后台设置新窗口打开,前端页面点击无效,还是当前页面打开<ahref=”{$field.url}”{$field.target}target=”_blank”title=”{$field.title}”>{$field.title}</a>在模板里面友情链接里面得A标签里面添加{$field.target}标签即可{eyou:flinktype=’text’row=’100’titlelen=’20’}<ahref=”{$fi.

    2022年10月6日
    5
  • 八皇后算法解析[通俗易懂]

    八皇后算法解析[通俗易懂]今天研究力扣的一道题死活写不出来对应的算法,没办法自己算法基础太差。于是看了下答案,发现使用什么回溯算法,菜鸟表示平时开发期间写的最复杂的程序就是写了两层for循环,已经很牛逼了有木有?这个回溯算法什么鬼?于是乎百度了下,算是了解了回溯算法是什么玩意儿。这里分析一波八皇后算法来加深一下理解。https://blog.csdn.net/microopithecus/article/details/…

    2022年4月20日
    56
  • db2查看数据库端口

    (1)查询数据库管理器配置参数,查找到端口名[test88:dsadm:/gpfsetl/etldata/lch]db2getdbmcfg|grepSVCENAME TCP/IPServicename                         (SVCENAME)=DB2_dsadm SSLservicename                       …

    2022年4月8日
    189
  • Vsftp与PAM虚拟用户

    Vsftp与PAM虚拟用户Vsftp与PAM虚拟用户使用yum安装vsftpyum install vsftpd pam pam-* db4 db4-* 创建一个保存用户及密码的文件cd /etc/vsftpd/ touch virtual_login 添加用户(一行用户一行是密码)vim  virtual_login dongnan nandong

    2025年6月23日
    7
  • 网络协议——RPC协议

    网络协议——RPC协议网络协议——RPC协议远程调用协议,用于定义服务之间的接口调用规范标准1、RPC调用标准1.1、RPC结构客户端(服务端):执行逻辑进行本地调用Stub:对参数进行封装/解封装RPCRuntime:发送/接收请求/响应1.2、ONCRPC最早的RPC框架之一1.2.1、外部数据表示法(XDR)规定交互协议的文件,包括:XID:一对请求/响应的唯一标识CALL:请求为0,响应为1RPCVersion:RPC协议的版本号ProgramNumber:服务端程序的编号Ve

    2022年5月19日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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