2016-07-18 10 views
-3

This is the question私は、次のシリーズ

#include <iostream> 
using namespace std; 
int factorial(int x){ 
int fact=1; 
if (x==1){ 
return 1; 
} 
else{ 
    fact=x*factorial(x-1); 
} 
return fact; 
} 

int main() 
{ 
double sum1=0; 
double sum2=0; 
for (int i=1;i<100;i=i+2){ 

sum1=sum1+1/factorial(i); 
} 
for (int j=2;j<101;j=j+2){ 
     sum2=sum2-1/factorial(j); 
    } 
    double sum; 
    sum=sum1+sum2; 
    cout<<sum<<endl; 

} 

の合計を計算したい場合は、この運動をしていた私がここに間違って何をしたのですか? Codeblocksは実行中にエラーを表示し続けますが、これに代わるものは何ですか? おかげ

+0

エラーは何ですか?あなたもテキストとして質問してください。 – NathanOliver

+0

'i> 1'でオーバーフローが発生していない場合、' 1/factorial(i) 'は0になります。あなたは '1.0 /階乗(i)'を意味しましたか? – MikeCAT

+0

'100!'は約9.3e + 157です。それが整数に収まることは絶対にありません。 –

答えて

0

enter image description here

sum=0。あなたが探している結果はsum = sum1 + sum2 = 0です。

コードを書き直す必要がありました。しかし、あなたは64ビットを使用する場合 私は32ビットを使用しているようにもっとフィットすることができます、私は sum1sum2がオーバーフローする前に、iを17に得ることができます。

#include <iostream> 
using namespace std; 


long factorial(long x){ 
    if (x == 1) { 
     return 1; 
    }else{ 
     return x*factorial(x-1); 
    } 
} 


int main(){ 
    cout<<"\n"; 

    int n = 15; 
    int i=0; 
    double sum = 0; 
    double sum1=0; 
    double sum2=0; 

    for (i = 1; i <= n; i++){ 
     sum1 += 1.0/factorial(i); 
     cout<<" factorial("<<i<<") = "<<factorial(i)<<" , 1/factorial("<<i<<") = "<<sum1<<" \n"; 
    } 

    cout<<"\nSum1 = "<<sum1<<"\n\n"; 

    for (i = 1; i <= n; i++){ 
     sum2 -= 1.0/factorial(i); 
     cout<<" factorial("<<i<<") = "<<factorial(i)<<" , 1/factorial("<<i<<") = "<<sum2<<" \n"; 
    } 

    cout<<"\nsum2 = "<<sum2<<"\n\n"; 

    sum=sum1+sum2; 
    cout<<"Sum1+sum2 = "<<sum<<endl; 

cout<<"\n"; 
return 0; 

} 
関連する問題