java一个疑问 求50的阶乘

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java一个疑问 求50的阶乘相关的知识,希望对你有一定的参考价值。

import java.math.*;

public class LargeFactorial
public static void main(String[] args)
System.out.println("50! is \n" + factorial(50));

public static BigInteger factorial(long n)
BigInteger result = BigInteger.ONE;
for(int i=1;i<=n;i++)
result = result.multiply(new BigInteger(i+""));
return result;



result = result.multiply(new BigInteger(i+"")); 为啥是i+"" 为啥去了就错了呢
还有 这个result = result.multiply(new BigInteger(i+""));
啥意思。为啥这么写啊

因为BigInteger的构造方法有一个就是传入字符串数字的参数
你这里的i是int型, i +"" 就把i转化成String类型的了,如果i等于1 i+""就相当于“1”了
也可以把i+“” 改成String.valueOf(i);
所以去掉就报错
可以去查看API,看看BigInteger的构造方法
希望对你有帮助
参考技术A BigInteger类的构造方法是 BigInteger(String s)
所以必须 i+“” 来形成一个String类型作为构造参数
去掉就错是因为没有构造方法 BigInteger(long l)

下面一句什么意思?看看java doc文档中有说明:
Returns a BigInteger whose value is (this * val).
参考技术B 这里的i+"" 起到转换类型的作用!BigInteger的的参数要求是String类型的! 参考技术C BigInteger的构造函数,要求String类型的参数。可以看API文档的。 参考技术D 100的阶乘太大了,超出了int的数据范围。把int
b=1;改成double
b=1;
另外太大的double会输出成科学计数法,结尾的1e157是乘以10的157次方的意思。

Java基础50道经典练习题(21)——求阶乘

【程序 21 求阶乘】
题目:求 1+2!+3!+...+20!的和
 
程序分析:此程序只是把累加变成了累乘。
 
源码:
package com.homework.test;

/*
【程序 21 求阶乘】
题目:求 1+2!+3!+...+20!的和
程序分析:此程序只是把累加变成了累乘。
 */
public class Test21 {
    public static void main(String [] args){
        long Sum = 1;
        long temp = 1;
        for (int i=2; i<=20; i++){
            temp *= i;
            Sum += temp;
        }
        System.out.println(Sum);
    }

}

  

 

以上是关于java一个疑问 求50的阶乘的主要内容,如果未能解决你的问题,请参考以下文章

Java基础50道经典练习题(21)——求阶乘

Java基础50道经典练习题(21)——求阶乘

Java基础50道经典练习题(22)——递归求阶乘

Java基础50道经典练习题(22)——递归求阶乘

Java50道经典习题-程序22 递归求阶乘

计算50的阶乘,结果末尾处有多少个0