java中四种阶乘的计算

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));

        

    }

}

 

时间: 2024-08-08 05:09:17

java中四种阶乘的计算的相关文章

java中四种引用类型

java中四种引用类型  今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在网上查资料,感觉收获颇多,现记录如下. 对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地

Java中四种遍历Map对象的方法

方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(Map.Entry<Integer,Integer> entry:map.entrySet()){ System.out.println("key="

java中四种访问修饰符

Java中的四种访问修饰符:public.protected.default(无修饰符,默认).private. 四种修饰符可修饰的成分(类.方法.成员变量)   public protected default private 类 √ × √ ×(内部类可以用private修饰) 方法 √ √ √ √ 成员变量 √ √ √ √ 四种修饰符的访问权限 public:对所有类可见 protected:对同一包中的类可见.对同一包及不同包中的子类可见 default:对同一包中的类可见.对同一包中的

java中四种内部类的基本知识

java中的内部类有四种:1.静态内部类:作为类的静态成员,存在于某个类的内部.  静态内部类虽然是外部类的成员,但是在未创建外部类的对象的情况下,可以直接创建静态内部类的对象.静态内部类可以引用外部类的静态成员变量和静态方法,但不能引用外部类的普通成员. //静态内部类的测试程序public class Outter {static int a=1;int b=5;static void test(){    System.out.println("外部类的静态方法");}stati

java中四种操作(dom、sax、jdom、dom4j)xml方式详解与比较

1)DOM(JAXP Crimson解析器)     DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不是像

Java中四种引用

从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 1.强引用 本章前文介绍的引用实际上都是强引用,这是使用最普遍的引用.如果一个对象具有强引用,那就 类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题. 2.软引用(SoftReference) 如果一个

java中四种访问修饰符区别及详解全过程

客户端程序员:即在其应用中使用数据类型的类消费者,他的目标是收集各种用来实现快速应用开发的类. 类创建者:即创建新数据类型的程序员,目标是构建类. 访问控制存在的原因:a.让客户端程序员无法触及他们不应该触及的部分  : b.允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员  java的四个关键字:public.protected.default.private(他们决定了紧跟其后被定义的东西可以被谁使用) 适用范围<访问权限范围越小,安全性越高>   访问权限   类  

Java中四种引用的区分

强引用(StrongReference) 强引用就是指在程序代码之中普遍存在的,比如下面这段代码中的object和str都是强引用: 1 2 Object object = new Object(); String str = "hello"; 只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象.比如下面这段代码: 1 2 3 4 5 6 7 8 9 10 public class Main {

java中四种引用类型(对象的强、软、弱和虚引用)

对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用. ⑴强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出O