Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用for循环计算序列_Java - Fatal编程技术网

Java 使用for循环计算序列

Java 使用for循环计算序列,java,Java,我想写一个程序,读取一个整数,然后打印以下序列的和 1/1! + 1/2! + 1/3!+..........1/number! . 我应该只使用for循环,而不使用数学方法。 这是我的代码,它运行良好,但我的问题是,如何打印序列,然后打印答案 例如,如果x=3,则应打印1/1+1/2+1/6=1.666667 像这样: Scanner input= new Scanner(System.in); int x= input.nextInt(); double product=1,sum=0;

我想写一个程序,读取一个整数,然后打印以下序列的和

1/1! + 1/2! + 1/3!+..........1/number! .
我应该只使用for循环,而不使用数学方法。 这是我的代码,它运行良好,但我的问题是,如何打印序列,然后打印答案

例如,如果x=3,则应打印1/1+1/2+1/6=1.666667

像这样:

Scanner input= new Scanner(System.in);
int x= input.nextInt();
double product=1,sum=0;
for(int i=1;i<=x;i++)
{
    product*=i;
    sum+=1.0/product;
    System.out.print("1/" + product);

    if(i == x){
        System.out.print(" = " + sum);
    }
    else {
        System.out.print(" + ");
    }
}
如果您不希望分母有小数点,那么将乘积变量设为long而不是double


当然,你所写的对小数字有效,但阶乘增长非常快,分数也是如此,因此,如果您希望浮点数的精度尽可能精确,最好使用BigDecimal类来表示分数,而不是使用double。

试试下面的代码,可能会对您有所帮助

    public static void main(String[] args) {        
    Scanner input= new Scanner(System.in);
    int x= input.nextInt();
    double product=1,sum=0;
    for(int i=1;i<=x;i++)
    {
        product*=i;
        sum+=1.0/product;          
        System.out.print(""+i+"/"+(int)product+"+");
    }
    System.out.print("="+sum);
}
你可以试试这个:-

import java.util.*;
class Number
{
 int fact(int n){
 int p=1;
 for(int i=1;i<=n;i++){
 p*=i;
 }
 return p;
 }
 public static void main(String args[]){
 Scanner sc=new Scanner(System.in);
 Number num=new Number();
 int number;
 System.out.println("Enter the limit:-");
 number=sc.nextInt();
 double sum=0;
 for(int lo=1;lo<=number;lo++){
 sum+=(double)lo/(double)(num.fact(lo));
 }
 System.out.println("The sum is:- "+sum);
 }
 } 

您可以在每次迭代时打印字符串1/product+,最后一次迭代只需做一点小改动。是否对最终数字的小数位数有严格限制?你的问题指定了6,但这是一个硬限制,还是仅仅是你在问题中写的数字?@sara chatila在得到答案后,请不要删除这个问题。
    public static void main(String[] args) {        
    Scanner input= new Scanner(System.in);
    int x= input.nextInt();
    double product=1,sum=0;
    for(int i=1;i<=x;i++)
    {
        product*=i;
        sum+=1.0/product;          
        System.out.print(""+i+"/"+(int)product+"+");
    }
    System.out.print("="+sum);
}
1/1+2/2+3/6+=1.6666666666666667
import java.util.*;
class Number
{
 int fact(int n){
 int p=1;
 for(int i=1;i<=n;i++){
 p*=i;
 }
 return p;
 }
 public static void main(String args[]){
 Scanner sc=new Scanner(System.in);
 Number num=new Number();
 int number;
 System.out.println("Enter the limit:-");
 number=sc.nextInt();
 double sum=0;
 for(int lo=1;lo<=number;lo++){
 sum+=(double)lo/(double)(num.fact(lo));
 }
 System.out.println("The sum is:- "+sum);
 }
 }