编写Java程序,使用while循环语句计算1+1/2!+1/3!…1/20!之和.

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);
}
}
!为阶乘 求解释 a = a*(1.0/i);
这串代码什么意思 真没看懂 就解释这一条就行

    package practice;  

    /* 

    使用while循环 计算1+1/2!+1/3!+...+1/20! 

    a用于存储前n个阶乘分之一 

    sum 用于累加和 

    */  

    public class WhileDemo {  

    public static void main(String[] args) {  

    /*i=i+1的简写形式是i+=1;但是二者有本质的区别: 

    如果 i是short类型,+=:会自动类型提升,而=则不会 

    所以  

    short i=0; 

    i+=1;//编译通过,类型提升 

    i=i+1;//编译失败,因为这是赋值操作, 

    i是short类型,而1是默认是int类型 

    */  

    double sum = 0,a = 1;//因为是分式,所以用double类型  

    int i = 1;  

    while(i <= 20) {  

    sum +=a;  

    i++;  

    a*=(1.0/i);//使a的值发生变化  

    System.out.println(a*i);  

    }  

    System.out.println(sum);  

    System.out.println("_________________________");  

    ForDemo.main(args);  

    System.out.println(Text.jieCheng(4));  

    }  

    }  

    class ForDemo{  

    public static void main(String[] args) {  

    double sum = 0,a = 1;  

    for (int i = 1; i <=20; i++) {  

    sum +=a;  

    a*=(1.0/i);  

    System.out.println(a*i);  

    }  

    sum--;  

    System.out.println(sum);  

    }  

    }  

    //递归做法:效率不高,判断影响性能  

    class Text{  

    public static void main(String[] args){  

    //       double sum=0.0,count=1.0;  

    // while(count<=20.0){  

    // sum+=1.0/(jieCheng(count));  

    // count++;  

    // }  

    // System.out.print(sum);  

    }  

    public static long  jieCheng(long sum){  

    /* for(int i=1;i<=c;i++){ 

    sum*=i; 

    }*/  

    if(sum<=1)return 1;  

    return sum*jieCheng(sum-1);  

    }  

    }  

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-23
呵呵,你知道阶乘的,他其实就是这样的,比如1/24就可以写成(1/2)*(1/12)这样吧,a=a*(1/i)就可以理解成这样子,第一个是1,第二个就是1*(1/2)结果就是0.5下来呢,就是0.5*(1/3)这个呢就等于是(1/2)*(1/3)也就等于是1/3的阶剩了呀,你说对不,一直循坏到结果,这样理解了吧. 在不理解可以问我,我在线.本回答被提问者采纳
第2个回答  2011-01-20
这要看你while循环体怎么写的了?
1)
int i=1,n=0;int sum=0;
while(sum<=1){
sum=sum+1/i;
i++;
}
n=i;
上面这种情况无法跳出循环,因为1/i=0(i>1),所以sum=1;循环不会停止;

2)
double i=1,sum=0;int n=0;
while(sum<=1){
sum=sum+1/i;
i++;
}
n=(int)i;
上面这种情况无法跳出循环,因为1/i>0(i>1),所以sum>1;循环停止,n=2;
你可能是除法规则没有理解,除法和数据类型相关的。
第3个回答  2011-01-19
a = a*(1.0/i)
a乘上1/N 就是 1/N!

阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。 例如所要求的数是4,则阶乘式是1×2×3×4,得到的积是24,24就是4的阶乘。
参考阶乘概念
http://baike.baidu.com/view/245476.htm#1
第4个回答  2011-01-19
把a*(1.0/i)赋值给a