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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • EFK(Elasticsearch+Filebeat+Kibana)日志收集系统

    EFK(Elasticsearch+Filebeat+Kibana)日志收集系统

    2021年6月2日
    99
  • CentOS 5.8 Zimbra邮件系统安装与配置

    CentOS 5.8 Zimbra邮件系统安装与配置

    2021年5月11日
    125
  • Python 万能代码模版:爬虫代码篇「建议收藏」

    Python 万能代码模版:爬虫代码篇「建议收藏」你好,我是悦创。很多同学一听到Python或编程语言,可能条件反射就会觉得“很难”。但今天的Python课程是个例外,因为今天讲的**Python技能,不需要你懂计算机原理,也不需要你理解复杂的编程模式。**即使是非开发人员,只要替换链接、文件,就可以轻松完成。并且这些几个实用技巧,简直是Python日常帮手的最佳实践。比如:爬取文档,爬表格,爬学习资料;玩转图表,生成数据可视化;批量命名文件,实现自动化办公;批量搞图,加水印、调尺寸。接下来,我们就逐一用Python实

    2022年5月26日
    77
  • copy与deepcopy_java clone 深拷贝

    copy与deepcopy_java clone 深拷贝说到复制方法,在开发程序中要怎么复制呢?其实复制Java数组的方法很多,但大多数都是浅层复制,今天爱站技术频道小编带你寻找详解JAVA深层拷贝DeepCopy的使用方式。方法实现很简单,提供两种方式:一种是序列化成数据流,前提是所有对象(对象中包含的对象…)都需要继承Serializable接口,如果都继承了那很容易,如果没有继承,而且也不打算修改所有类,可以用第二种方式。第二种是将对象序…

    2022年10月2日
    0
  • 版本过低怎么升级_手机版本出现问题怎么办

    版本过低怎么升级_手机版本出现问题怎么办昨天心血来潮更新了下Eclipse下的SDK,但是由于网速、时间等原因,没有全部更新完。1、打开Eclipse的时候,提示ThisAndroidSDKrequiresAndroidDeveloperToolkitversion23.0.0orabove.Currentversionis22.6.2.v201403212031-1085508.Pleaseup

    2022年10月29日
    0
  • Mybatis中Like 的使用方式以及一些注意点

    做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!模糊查询在项目中还是经常使用的,本文就简单整理Mybatis中使用Like进行模糊查询的几种写法以及一些常见的问题。使用Springboot简单配置一下Mybatis,然后进行说明。Springboot集成Mybatis这里就不做介绍了。初始数据方式一在Mybatis中的第一种写法: <!–有sq…

    2022年2月28日
    44

发表回复

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

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