博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中四种阶乘的计算
阅读量:7240 次
发布时间:2019-06-29

本文共 1868 字,大约阅读时间需要 6 分钟。

package 
com.zf.s2;
//创建一个包
 
import 
java.math.BigInteger;
//导入类
import 
java.util.ArrayList;
import 
java.util.List;
 
public 
class 
TextFactorial {
//操作计算阶乘的类
    
public 
static 
int 
simpleCircle(
int 
num){
//简单的循环计算的阶乘
        
int 
sum=
1
;
        
if
(num<
0
){
//判断传入数是否为负数
            
throw 
new 
IllegalArgumentException(
"必须为正整数!"
);
//抛出不合理参数异常
        
}
        
for
(
int 
i=
1
;i<=num;i++){
//循环num
            
sum *= i;
//每循环一次进行乘法运算
        
}
        
return 
sum;
//返回阶乘的值
    
}
    
public 
static 
int 
recursion(
int 
num){
//利用递归计算阶乘
        
int 
sum=
1
;
        
if
(num < 
0
)
            
throw 
new 
IllegalArgumentException(
"必须为正整数!"
);
//抛出不合理参数异常
        
if
(num==
1
){
            
return 
1
;
//根据条件,跳出循环
        
}
else
{
            
sum=num * recursion(num-
1
);
//运用递归计算
            
return 
sum;
        
}
    
}
    
public 
static 
long 
addArray(
int 
num){
//数组添加计算阶乘
        
long
[]arr=
new 
long
[
21
];
//创建数组
        
arr[
0
]=
1
;
         
        
int 
last=
0
;
        
if
(num>=arr.length){
            
throw 
new 
IllegalArgumentException(
"传入的值太大"
);
//抛出传入的数太大异常
        
}
        
if
(num < 
0
)
            
throw 
new 
IllegalArgumentException(
"必须为正整数!"
);
//抛出不合理参数异常
        
while
(last<num){
//建立满足小于传入数的while循环
            
arr[last+
1
]=arr[last]*(last+
1
);
//进行运算
            
last++;
//last先进行运算,再将last的值加1
        
}
        
return  
arr[num];
    
}
    
public 
static 
synchronized 
BigInteger bigNumber(
int 
num){
//利用BigInteger类计算阶乘
 
            
ArrayList list = 
new 
ArrayList();
//创建集合数组
            
list.add(BigInteger.valueOf(
1
));
//往数组里添加一个数值
            
for 
(
int 
i = list.size(); i <= num; i++) {
                
BigInteger lastfact = (BigInteger) list.get(i - 
1
);
//获得第一个元素
                
BigInteger nextfact = lastfact.multiply(BigInteger.valueOf(i));
//获得下一个数组
                
list.add(nextfact);
            
}
            
return 
(BigInteger) list.get(num);
//返回数组中的下标为num的值
 
    
}
 
    
public 
static 
void 
main(String []args){
//java程序的主入口处
        
int 
num=
5
;
        
int 
num1=
23
;
        
System.out.println(
"简单的循环计算"
+num+
"的阶乘为"
//调用simpleCircle
                
+simpleCircle(num));
        
System.out.println(
"利用递归计算"
+num+
"的阶乘为"
//调用recursion
                
+recursion(num));
        
System.out.println(
"数组添加计算"
+num+
"的阶乘为"
//调用addArray
                
+addArray(num));
        
System.out.println(
"利用BigInteger类计算"
+num1+
"的阶乘为"
//调用bigNumber
                
+bigNumber(num1));
         
    
}
}

 

转载地址:http://xkfbm.baihongyu.com/

你可能感兴趣的文章
C++Bulder DataSnap 内存泄露元凶
查看>>
二叉搜索树与双向链表
查看>>
Cassandra查询语言CQL的基本使用
查看>>
echo输出到stderr
查看>>
Leetcode: Search a 2D Matrix II
查看>>
Unicode与 utf8的互相转换
查看>>
Android开发周报:Flyme OS开源、经典开源项目解析
查看>>
uva 568(数学)
查看>>
【Hibernate】Hibernate系列4之配置文件详解
查看>>
centos7+redis+php环境配置
查看>>
割点、桥模板以及点双连通、边双连通
查看>>
Yii数据库操作增删改查-[增加\查询\更新\删除 AR模式]
查看>>
vs发布的程序不依赖运行时库msvcp100.dll
查看>>
jsp简单实现统计在线人数
查看>>
df、du、fdisk:Linux磁盘管理
查看>>
C#时间戳转换[转发]
查看>>
MySQL · 答疑解惑 · MySQL 锁问题最佳实践
查看>>
SDK的制作详解
查看>>
$.ajax()方法详解
查看>>
ssh登录很慢,登录上去后速度正常问题的解决方法
查看>>