[백준 6376] e 계산 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
자연상수 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;
}