2 nishajuxia5058 nishajuxia5058 于 2016.09.20 21:42 提问

Java中一个小的计算问题

Q:用Java语言编写程序,计算e=1+1/1!+2/2!+3/3!+.....+n/n!.要求e值精确到小数点后第五位。

下面是我写的代码。

package Cheng;

import java.util.Scanner;

public class Dutu {
public static int inputN(){
Scanner scanner=new Scanner(System.in);
int n;
System.out.println("请输入n的值:");
n=scanner.nextInt();
return n;
}
public static float figure(int n){
float l=0;
float sum=0;
int m,i,temp;
temp=n;
m=1;
for(;temp>=1;temp--){
for(i=1;i<=temp;i++)
m*=i;

    l=(float)temp/(float)m;
    sum+=l;
    }
    return sum;
}

public static void main(String[] args){
    int n=inputN();
    float j=1+figure(n);
    System.out.println("计算结果为"+j);
}

}
图片说明

3个回答

qq_29594393
qq_29594393   Ds   Rxr 2016.09.21 20:10
已采纳

整数传给浮点型不会精度丢失,从低往高,自动转换(隐式转换),精度不丢失 ,从高向低,需要显示转换(强转),精度丢失,如何判断高低 ,看占字节的位数

  import java.util.Scanner;
public class Dutu {
public static int inputN(){
Scanner scanner=new Scanner(System.in);
int n;
System.out.println("请输入n的值:");
n=scanner.nextInt();
return n;
}
public static float figure(float n){
        return n==1?n: figure(n-1)+n/jc(n);
}
public static float jc(float n){
        return n==1?n:jc(n-1)*n;
}
public static void main(String[] args){
    int n=inputN();
    float j=1+figure(n);
    System.out.println("计算结果为"+j);
}
}
qq_29594393
qq_29594393 回复闲敲棋子落灯花-: 在第二层循环中那个m的值有问题 ,你输出那个值看一下,
大约一年之前 回复
nishajuxia5058
nishajuxia5058 是因为那两个for循环的问题吗?
大约一年之前 回复
nishajuxia5058
nishajuxia5058 那个我写的那个为什么不行呢。
大约一年之前 回复
caozhy
caozhy   Ds   Rxr 2016.09.20 21:58

本来就是2.5
1!=1
2!=2
1+1/1+1/2=2.5

caozhy
caozhy 回复当作看不见: 哦,看错l了
大约一年之前 回复
qq_29594393
qq_29594393 错了吧,是3 是 1+1/1!+2/2!
大约一年之前 回复
qq_29594393
qq_29594393   Ds   Rxr 2016.09.20 21:57
 import java.util.Scanner;
public class Dutu {
public static int inputN(){
Scanner scanner=new Scanner(System.in);
int n;
System.out.println("请输入n的值:");
n=scanner.nextInt();
return n;
}
public static float figure(float n){
    if(n==1)
        return n;
    else 

    return  figure(n-1)+n/jc(n);
}
public static float jc(float n){
    if(n==1)
        return n;
    else
     return jc(n-1)*n;
}
public static void main(String[] args){
    int n=inputN();
    float j=1+figure(n);
    System.out.println("计算结果为"+j);
}
}
nishajuxia5058
nishajuxia5058 厉害。那个整数可以直接传给浮点数吗?不会出现精度丢失什么的吗?
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片