Java杂记——大数操作(1000的阶乘问题)

问题:

用Java计算n的阶乘,n=1000


思路:

一般求解阶乘我们可以很快的想到用一个for循环即可解决问题,但是这里问题稍微有些刁难。

当n=1000时,暂且不说10000,最后阶乘所得的最终结果是远远大于long数据类型的范围的。

主数据类型中,不可以存储这么大的数字。

那么就得使用今天的主角BigInteger类,来完成超大数据的各种操作问题。


说到这里,就先介绍一下BigInteger的使用方法,这里引用了李春春的专栏中的一部分介绍,全部内容请:点击打开链接

BigInteger在java.math 的包中


import java.math.BigInteger;  
  
public class BigIntegerDemo1 {  
  
    public static void main(String[] args) {  
        BigInteger bi1 = new BigInteger("123456789") ;  // 声明BigInteger对象  
        BigInteger bi2 = new BigInteger("987654321") ;  // 声明BigInteger对象  
        System.out.println("加法操作:" + bi2.add(bi1)) ;    // 加法操作  
        System.out.println("减法操作:" + bi2.subtract(bi1)) ;   // 减法操作  
        System.out.println("乘法操作:" + bi2.multiply(bi1)) ;   // 乘法操作  
        System.out.println("除法操作:" + bi2.divide(bi1)) ; // 除法操作  
        System.out.println("最大数:" + bi2.max(bi1)) ;  // 求出最大数  
        System.out.println("最小数:" + bi2.min(bi1)) ;  // 求出最小数  
        BigInteger result[] = bi2.divideAndRemainder(bi1) ; // 求出余数的除法操作  
        System.out.println("商是:" + result[0] +   
            ";余数是:" + result[1]) ;  
    }  
} 




熟悉了这个类的各种操作以后,这个阶乘问题也就迎刃而解了。

参考答案:

//首先导入大数包和输入包
import java.math.BigInteger;
import java.util.Scanner;

//计算n!(1*2*...*n)
public class BigIntegerTestDrive {
    public static void main(String[] args){
        //输入n
        Scanner in =new Scanner(System.in);
        int n = in.nextInt();

        //输入最终答案的初始值
        int pre_answer=1;
        //将答案初始值由int类型转变为String类型
        String x=String.valueOf(pre_answer);
        //将String类型的答案的初始值,传递给BigInteger类型,初始化为最终的答案
        BigInteger answer=new BigInteger(x);

        //循环迭代逐次相乘
        for (int i=1;i<=n;i++){

            //因为BigInteger类型只能和该类型的变量相乘,因此还需将每次的中间乘数也依次变为BigInteger类型
            String var=String.valueOf(i);
            BigInteger variable=new BigInteger(var);

            //调用相乘函数进行相乘运算
            answer=answer.multiply(variable);

        }
        //输出最终答案
        System.out.println(answer);
        in.close();

    }
}







你可能感兴趣的:(Java杂记,java,BigInteger)