想问个Java的题目

qq_42062337 2019-02-15 08:52:44
这是一个写1+1/2!+1/3!+1/4!+···的前20项和的一个小程序:
package practice;

public class E6 {
public static void main(String Args[]) {
int a=1;
double sum=0;
for(int i=1;i<=20;i++) {
a=a*i;
sum=sum+1.0/a;
}
System.out.println("1+1/2!+1/3!+1/4!+···的前20项和为:"+sum);
}

}

[/code]
结果是1.7182818346494484。结果和其他博主给的差一点,这个算法有什么错的地方?
...全文
272 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-02-18
  • 打赏
  • 举报
回复
20的阶乘,int已经溢出了,变为负数了
把int a=1;改成double a = 1;就可以了
  • 打赏
  • 举报
回复
引用 2 楼 常应常静,常清静矣 的回复:
你试试我这个

package Demo;

//1+1/2!+1/3!+1/4!+···的前20项和
public class Demo25 {
public static void main(String[] args) {
double sum = 0;
double num = 1;
for (int i = 1; i <= 20; i++) {
// 你的a=1.0/(a*1)求的是1,1/2,1/3···的值,题目要求的是1/n阶乘的值
num = num * ((double) 1 / i);
sum = sum + num;
}
System.out.println("前20项和为:" + sum);
}
}

结果:1.7182818284590455
  • 打赏
  • 举报
回复
你试试我这个

package Demo;

//1+1/2!+1/3!+1/4!+···的前20项和
public class Demo25 {
public static void main(String[] args) {
double sum = 0;
double num = 1;
for (int i = 1; i <= 20; i++) {
// 你的a=1.0/(a*1)求的是1,1/2,1/3···的值,题目要求的是1/n阶乘的值
num = num * ((double) 1 / i);
sum = sum + num;
}
System.out.println("前20项和为:" + sum);
}
}
OrangeChenZ 2019-02-16
  • 打赏
  • 举报
回复
你试试把int改为double

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧