我想编写一个读取整数的程序,然后打印以下序列的总和
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);
答案 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);
}
}