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+""));
啥意思。为啥这么写啊
你这里的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的阶乘的主要内容,如果未能解决你的问题,请参考以下文章