使用while循环语句计算1+1/2!+1/3!+...1/20!之和,请看看程序是否对。

wolcott2387 2011-02-25 06:09:57

public class Example_02 {
public static void main(String args[])
{
double sum = 0,a = 1;
int i = 1;
while(i <= 20)
{
sum = sum+a;
i = i+1;
a = a*(1.0/i);
}
System.out.println(sum);
}
}
...全文
2764 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
funny 2011-07-21
  • 打赏
  • 举报
回复
類型問題啊
pps79822399 2011-04-09
  • 打赏
  • 举报
回复
楼主的问题错在 int i = 1;这里,如果指定 i 为int类型,当你计算1/i的时候,结果为0,而不是你想要的,这是由java中int类型决定的,如果 定义 double i = 1;再运行你的程序,结果就正确了,这个就好比:short s1 = 1; s1 = s1 + 1;会提示错误一样,因为会自动提升表达式类型
iambic 2011-02-25
  • 打赏
  • 举报
回复
乱发帖,乱回帖,乱结贴。
zhujh_java 2011-02-25
  • 打赏
  • 举报
回复
public static void main(String[] args) {
int i=1,k=1;
double sum=0;
while(i<=20){
k*=i; //k是除数,是i的阶乘
sum+=(1.0)/k;
i++;
}
System.out.println(sum);
}

你里面的 a = 1.0/(a*i) 目的是求 1/n!,但不能这么写的,阶乘要作为一个除数来用。。。
iambic 2011-02-25
  • 打赏
  • 举报
回复
验算:
user=> (defn n! [n] (apply * (range 1 (inc n))))
#'user/n!
user=> (defn x [n] (apply + (map #(/ 1.0 (n! %)) (range 1 (inc n)))))
#'user/x
user=> (x 20)
1.7182818284590455

和你的结果一样。
iambic 2011-02-25
  • 打赏
  • 举报
回复
依我看你的计算是对的。
wolcott2387 2011-02-25
  • 打赏
  • 举报
回复
只要指出错在哪里就可以了!!!!(就给分)
ww884203 2011-02-25
  • 打赏
  • 举报
回复

public class Example_02
{
public static int factorial(int i)
{
int result = 1;
while(i!=0)
{
result *= i--;
}
return result;
}

public static void main(String[] arguments)
{
int i = 1 ;
double sum = 0.0 , a = 0.0;
while( i<=20 )
{
a = 1.0 / (double) factorial(i);
sum += a;
++i;
}
System.out.println(sum);
}
}
jl292355621 2011-02-25
  • 打赏
  • 举报
回复
这个是错误的,自己用笔算一下就可以知道了,只计算到3,sum就是错的,算法有问题
我写的,给你作参考

public class ee {

public static void main(String[] args) {
float sum = 0;
float p = 1;
while (p <= 6) {
float m = 1 / p;
sum = sum + m;
p = p + 1;
}
System.out.println("sum " + sum);
}
}
Inhibitory 2011-02-25
  • 打赏
  • 举报
回复
public class Test {
public static void main(String args[]) {
double sum = 0, a = 1;
int i = 1;
while (i <= 20) {
sum += 1.0 / a;
a *= ++i;
}
System.out.println(sum);
}
}
wolcott2387 2011-02-25
  • 打赏
  • 举报
回复
是不是应该改成这样:

public class Example_02 {
public static void main(String args[])
{
double sum = 0,a = 1;
int i = 1;
while(i <= 20)
{
sum = sum+a;
i = i+1;
a = 1.0/(a*i);
}
System.out.println(sum);
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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