使用for循环来计算序列

时间:2014-11-01 10:45:27

标签: 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;
for (int i = 1; i <= x; i++)
{
    product *= i;
    sum += 1.0 / product;
}
System.out.println("The sum is "+sum);

3 个答案:

答案 0 :(得分:0)

像这样:

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(" + ");
    }
}

不是使用println,而是使用print,它将随着它一起附加到每一行。 您甚至可以在打印总和的最后一个上使用println,因为如果您将其放入方法并多次调用它,这将在每次执行之前为您提供一个新行。

Here is an ideone与它一起工作

输出:

1/1.0 + 1/2.0 + 1/6.0 = 1.6666666666666667

如果您不希望分母具有小数点,则将产品变量设为long而不是double


当然,你所写的内容适用于小数字,但是阶乘法增长得非常快,你的分数也会增长,所以使用BigDecimal类来表示分数而不是一个双倍,这可能是一个更好的计划。您希望浮点数的精度尽可能准确。

答案 1 :(得分:0)

尝试以下代码可能会对您有所帮助

    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

答案 2 :(得分:0)

你可以试试这个: -

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);
 }
 }