dポイントプレゼントキャンペーン実施中!

問題はeの値は次の近似式で求めることができる。
e=1+1/1!+1/2!+1/3!+...+1/(n-1)!+1/n!
nの値を12としてeの近似値を求めるプログラムを作成せよ。
<出力形式>
 n n! 1/n! e 誤差
 1 1 1.0000000000 2.0000000000 0.7182818285
2 2 0.5000000000 2.5000000000 0.2182818285
. . . . .
12
<小数点以下10桁まで表示>

が問題なんです。
ヒントとして
<1から25までの合計>
#include<iostream.h>
#include<imanip.h>
main()
{
int k,sum;
sum=0;
for(k=1;k<25;++k)
{sum+=k;
cout<<setw(5)<<k
<<setw(7)<<sum<<"\n";}
return 0;
}
これと
<nの階乗を求める>
#include<iostream.h>
#include<imanip.h>
main()
{
  int n,k,ki(1);
cout <<"nの値は?==>";cin>>n;
for (k=1;k<=n;++k)
{ ki*=k;
cout<<setw(5)<<k
<<setw(12)<<ki<<"\n";}
return 0;
}
がヒントとして与えられているんです。この2つをうまく使ったら良いよって言われたんですけどよく考えてもわからないんです。どなたかこの問題を解ける人がいたら教えてください。お願いします。

A 回答 (2件)

//あなたのためにはならないと思うけど一応作ってみました。


//細部は修正しましょう
#include <iostream.h>
#include <iomanip.h>
#define N 12 //12までやる

//e=1+1/1!+1/2!+1/3!+...+1/(n-1)!+1/n!

int main(){
double e=1.0;
unsigned long k=1;

cout << " n\t" << "n!\t" << "1/n!\t" << "\te\t\t" << "誤差" << endl;
for(int n=1;n<=N;n++){
k*=n;
e+=1.0/k;

cout << setw(3) << n << setw(10) <<k << " ";
cout << setw(12) << setprecision(10) << 1.0/k;
cout << setw(12) << setprecision(10) << e ;
cout << setw(16) << setprecision(10) << exp(1)-e << endl;
}
return 0;
}
    • good
    • 0
この回答へのお礼

本当にありがとうございます。すごく助かりました。ご丁寧に書いていただき感謝します。どんな人という欄には一般人と書かれていますが専門の方でないのにこのプログラムを作ることができるなんて(^^;)自分も頑張りたいと思います。

お礼日時:2004/11/16 23:30

ヒントの意味は、


合計の方は
1+1/1! + 1/2! …
をそれぞれの部分を合計すればいいよ

n!はもう求められるよね
ってことだと思いますよ。

ループをうまく利用することと
使う変数の有効桁数をよく考えてやればいいと思いますよ。
eの誤差を求めるところは、
exp関数を使うってことだろうと思います。

この回答への補足

回答ありがとうございます。それも踏まえた上で考えたのですがうまくプログラムが作れないんです。具体的にプログラムで教えていただきたいのですが?無理を言って申し訳ありません。

補足日時:2004/11/15 22:54
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!