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的值有问题 ,你输出那个值看一下,
接近 2 年之前 回复
nishajuxia5058
nishajuxia5058 是因为那两个for循环的问题吗?
接近 2 年之前 回复
nishajuxia5058
nishajuxia5058 那个我写的那个为什么不行呢。
接近 2 年之前 回复
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了
接近 2 年之前 回复
qq_29594393
qq_29594393 错了吧,是3 是 1+1/1!+2/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 厉害。那个整数可以直接传给浮点数吗?不会出现精度丢失什么的吗?
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
自定义异常计算面积的小程序
/* 有一个圆形和长方形 都可以获取面积,对于面积如果出现非法值,视为是获取面积出现问题。 问题通过异常来表示。 现有对这个程序进行基本设计。 */ //自定义异常 class NoValueException extends RuntimeException{ NoValueException(String message){ super(message); } } int
学习笔记20170312——JAVA解决农场母牛生baby的问题
第一次在CSDN博客上写东西,希望日积月累,终得收获。 问题: 农场一头小母牛, 母牛每年生母牛。 母牛5岁产母牛, 20年后多少牛? PS:在这里有个前提就是,第一头母牛已经>=5岁啦~ 思路脉络: 1、Object Oriented思想 ❤考虑类:母牛、农场    PS:一开始可能不会想到把农场设计为一个类。但母牛是成长在农场里的,随着时间推移,农场里的母牛
java中的数据精度计算问题
网上看了一些资料,在开发中遇到金额的计算很实用啊!! 如果需要精确计算,非要用String来够造BigDecimal不可!
蓝桥杯 数字三角形(java题解)
问题描述   (图3.1-1)示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路   径,使该路径所经过的数字的总和最大。   ●每一步可沿左斜线向下或右斜线向下走;   ●1<三角形行数≤100;   ●三角形中的数字为整数0,1,…99;   .   (图3.1-1) 输入格式   文件中首先读到的是三角形的行数。  接下来描述整个三角形 输出格式   最大总和
~这些年,我们一起学过的java~12~小学期程序设计之生理周期问题
今天解决了生理周期的计算问题,赶脚自己真心特别
计算中文熵
课程小作业,计算文本中中文字的熵,java
java小程序: 简易计算器
这是《java核心技术 卷一》里面的例9-1,本人觉得写得很好,特收藏在这里。 分析: 1、添加窗体Frame,作为容器在上面添加控件 2、整个界面可分为上下两个面板Panel,可先在上面的面板添加文本显示TextField,再在下面的面板采用4x4网格布局. 3、在下面的面板添加按钮(Button),按钮分数字符号(insert)和运算符号(command)两种,这个动作可以写成一个方法
Java面试值 从大字符串中汇总统计小字符串出现的次数
传智播客 package cn.itcast_07; /*  * 统计大串中小串出现的次数  * 举例:  *         在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun"  * 结果:  *         java出现了5次  *  * 分析:  *
java 计算数组中的最大,次大,最小,次小的数
//求出最大最小,次大,次小 int[] nums = {12,89,3,65,74}; int max = nums[0];//最大值 int min = nums[0];  //最小值 for(int i:nums){ if(i > max){ max
java练习--随机数加法器
问题及代码: 问题描述: 随机生成两个小于100的整数,计算并输入这两个数的结果,如果结果正确,就输出“You are correct!",如果错误就自动输出正确答案; 程序代码: import java.util.Scanner; public class Qu { public static void main(String[] args){ int number1=(int)(