2014-11-01 69 views
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.println("The sum is "+sum); 
+0

可以打印字符串'1/product +'在每次迭代中,最後一次迭代的變化很小。 – user2336315 2014-11-01 10:47:15

+0

最終號碼中的小數位數是否有硬限制?你的問題指定了6,但這是一個硬性限制,還是你在問題中寫的數字? – 2014-11-01 11:28:28

+0

@ sara-chatila請您在得到答案後不要刪除問題。 – Kenster 2014-11-01 12:03:10

回答

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); 
} 
} 
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,使用打印和它去沿着這將附加到每一行。 你甚至可以在打印總和的最後一個上使用println,因爲如果你把它放到一個方法中並多次調用它,這會在每次執行前給你一個新行。

Here is an ideone使用它

它輸出這樣的:

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

如果你不想分母有小數點,則使產品變量long而非double


當然,你寫的作品小的數字,但階乘增長相當迅速,因此也將你的分數,所以它可能是一個更好的計劃使用BigDecimal類代表分數相當如果您希望浮點數的精確度儘可能精確,則可以使用雙精度浮點數。

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

Aboce代碼的輸出是

1/1+2/2+3/6+=1.6666666666666667