u_sho競プロぶろぐ

21歳。みゃーくぴとぅ。ゆる~く続けますたぶん。  デザイン変えました(2019/2/25)これでいきます

POJ 1517 "u Calculate e"

A simple formula for napier's constant (e) is e=Σ0≦i≦n1/i!(n->infinity).

Imput

  no imput

Output

  n e
  - -----------
  0 1
  1 2
  2 2.5
  3 2.666666667
  4 2.708333333
  ...

とりあえずこれで通そうとしたのですが・・・

#include <iostream>
using namespace std;

double factorial(int i){
    if(i==0) return 1;
    else return i*factorial(i-1);
}

int main(void){
    double e=0;
    cout << "n e" << endl;
    cout << "- -----------" << endl;
    for(int i=0;i<10;i++){
        e += 1/factorial(i);
        cout << i << " " << e << endl;
    }
    return 0;
}

小数点以下が6桁でまるめられてしまいWA

ならばと思ってprintf("%d %lf")とかprintf("%d %.9lf")とか使ってみたら、1 1と表示させるべきところで1 1.000000000と出てしまいWAくらった。

最初の3つだけ手打ち入力する以外の方法がよくわからなかったのでググったらsetprecision()とかいうの(初見)を使ってた解法を見つけた。C++で桁数指定したいときに使うらしいんだけど末尾を0埋めしないのがprintfでやるのと違うっぽい(てきとー)

#include <iostream>
#include <iomanip>
using namespace std;

double factorial(int i){
    if(i==0) return 1;
    else return i*factorial(i-1);
}

int main(void){
    double e=0;
    cout << "n e" << endl;
    cout << "- -----------" << endl;
    for(int i=0;i<10;i++){
        e += 1/factorial(i);
        cout << i << " " << setprecision(10)<<e << endl;
    }
    return 0;
}

今度こそACうぇい。

 

今回はブログ書く練習のためにてきとーに問題選んで解いてみました。コードに行番号振ったり色付けたりする方法がわかんなかったので強い人教えてくれると助かります。(強い人はこのブログにたどり着くことなさそう)HTML強い人と競プロ強い人たぶん違うよね。うん。