Java计算 1+1/2!+1/3!·····1/20! 谁能给我详细讲解一下以下代码这个阶乘是在哪算的

importjava.math.BigDecimal;publicclassCases027{publicstaticvoidmain(String[]args){Big... import java.math.BigDecimal;

public class Cases027 {
public static void main(String[] args){
BigDecimal sum = new BigDecimal(0.0); //和
BigDecimal factorial = new BigDecimal(1.0); //阶乘项的计算结果
int i = 1; //循环增量
while(i<=20){
sum = sum.add(factorial); //累加各项阶乘的和
++i; //i加1
factorial = factorial.multiply(new BigDecimal(1.0/i)); //计算阶乘项
}
System.out.println("1+1/2!+1/3···1/20!的计算结果等于:\n"+sum); //输出计算结果
}
}

看了半天没看懂这个运算阶乘的原理和他的运算过程大概是什么形式请高手讲解一下。
展开
 我来答
jicker1986
2012-10-19 · 超过52用户采纳过TA的回答
知道小有建树答主
回答量:162
采纳率:100%
帮助的人:106万
展开全部
有注释的还没看懂么。。
这里面的句子不多,反映你所谓的阶乘就一个语句,
factorial = factorial.multiply(new BigDecimal(1.0/i)); //计算阶乘项

其他是1~20的循环 应该看得懂吧。

然后你就会发现其实只涉及到一个问题就是 BigDecimal.multiply(BigDecimal) 是怎么算的。
根据API

multiplypublic BigDecimalmultiply(BigDecimal multiplicand)返回一个 BigDecimal,其值为 (this × multiplicand),其标度为
(this.scale() + multiplicand.scale())。

参数:multiplicand - 乘以此 BigDecimal 的值。
返回:this * multiplicand

关于SCALE的理解:21/110 = 0.190 // integer=190, scale=3
19/100=0.19//integer=19, scale=2

好了 回到开头的地方来,1+1/2!+1/3!·····1/20!
在这个循环里面
fac先等于1
循环之后fac = 1×1/2 = 1/2!
再循环之后 fac = 楼上的fac(1×1/2)×1/3 = 1/3!
。。。。
1~20的循环就等于你的等式了。

查API step by step
duzc2
2012-10-19 · TA获得超过2512个赞
知道大有可为答主
回答量:1987
采纳率:50%
帮助的人:2112万
展开全部
new BigDecimal(1.0/i)

这个行计算的是: 1/n

factorial = factorial.multiply(new BigDecimal(1.0/i));

multiply 是乘法,也就是 factorial * 1/n

sum = sum.add(factorial);
就是加法
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
网友TrustMe
2012-10-19
知道答主
回答量:53
采纳率:0%
帮助的人:26万
展开全部
你可以这样看,i=1时,sum=sum.add(1.0);//sum=1
i++;//i=2
factorial=1*(1/2)=1/2!;
然后是i=2了,sum=sum.add(1/2!);
i++;//i=3
factorial=(1/2!)*(1/3);//也就是1/3!
这样就很明显了,每次在计算factorial = factorial.multiply(new BigDecimal(1.0/i));之前,factorial 都是前面的那个阶乘,每次计算factorial的时候,都是用前面那个加数乘以一个1/i,比如要算n的阶乘的时候,就用( 1/(n-1)! ) * ( 1/n ),这个就是阶乘的计算了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
专治八阿哥的孟老师
2012-10-19 · 爱生活,爱编程,专心于学习技术和撸猫
专治八阿哥的孟老师
采纳数:494 获赞数:3914

向TA提问 私信TA
展开全部
factorial = factorial.multiply(new BigDecimal(1.0/i));这句不就是么,每一次都用前面计算的乘积乘以1.0/i这里调用的是函数multiply
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式