작성일 :

문제 링크

6376번 - e 계산

설명

자연상수 e의 근삿값을 계산하는 상황에서, e = Σ(1/i!)의 부분합을 n=0부터 9까지 계산하여 표 형식으로 출력하는 문제입니다.

출력 형식은 정해진 표 형식을 따라야 하며, n=0은 1로, n=1과 2는 기본 형식으로, n=3부터 9까지는 소수점 아래 9자리로 출력합니다.


접근법

헤더와 구분선을 먼저 출력한 후, n=0부터 차례대로 계산합니다.

합계를 1.0으로 초기화하고(1/0! = 1), 팩토리얼 값을 유지하면서 i=1부터 9까지 반복합니다. 각 단계에서 팩토리얼에 i를 곱하고, 합계에 1/i!을 더합니다.

n의 값에 따라 출력 형식을 다르게 합니다. n=0은 별도로 출력하고, n=1과 2는 기본 부동소수점 형식으로, n=3부터는 소수점 아래 9자리 고정 형식으로 출력합니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("n e");
      Console.WriteLine("- -----------");
      Console.WriteLine("0 1");

      var sum = 1.0;
      var factorial = 1.0;
      
      for (var i = 1; i <= 9; i++) {
        factorial *= i;
        sum += 1.0 / factorial;

        if (i < 3) Console.WriteLine($"{i} {sum}");
        else Console.WriteLine($"{i} {sum:F9}");
      }
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  cout << "n e\n";
  cout << "- -----------\n";
  cout << "0 1\n";

  long double sum = 1.0L;
  long double factorial = 1.0L;
  
  for (int i = 1; i <= 9; i++) {
    factorial *= i;
    sum += 1.0L / factorial;

    if (i < 3) {
      cout.unsetf(ios::floatfield);
      cout << i << ' ' << sum << "\n";
    } else {
      cout << fixed << setprecision(9);
      cout << i << ' ' << sum << "\n";
    }
  }

  return 0;
}