이 문제에서는 하나의 숫자 n이 주어지며, 우리의 과제는 C++에서 급수 1 + 1/2 + 1/3 + 1/4 + ... + 1/n의 합을 구하는 프로그램을 작성하는 것입니다.
문제 개요
여기서 우리는 n번째 항까지의 급수 1 + 1/2 + 1/3 + 1/4 + ... + 1/n의 합을 구해야 합니다. 이 급수는 바로 조화급수(Harmonic Progression)입니다.
조화급수란 각 항의 역수가 등차수열을 이루는 급수를 말합니다. 즉, 조화급수 A1, A2, A3, ..., An이 존재한다면, 그 역수인 1/A1, 1/A2, 1/A3, ..., 1/An은 등차수열을 이룹니다.
먼저 예시를 통해 문제를 이해해 보겠습니다.
입력
n = 7
출력
2.59286
설명
합 = 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 = 2.59286
해결 접근 방법
조화급수의 합에 대한 별도의 공식은 없기 때문에, 이 문제는 단순히 반복문(loop)을 사용하여 해결할 수 있습니다. 1부터 n까지 각 항의 역수를 차례대로 더하면 됩니다.
알고리즘
초기화 − sumVal = 0;
- 1단계 − i가 1부터 n까지 순회하도록 반복문을 실행합니다.
- 1.1단계 − sumVal을 갱신합니다. sumVal += 1/i
- 2단계 − sumVal을 출력합니다.
C++ 구현 예제
아래 프로그램은 위에서 설명한 해결 방법이 실제로 동작하는 모습을 보여줍니다.
#include <iostream>
using namespace std;
float calcSeriesSum(int n){
float sumVar = 0.00;
for(float i = 1; i <= n; i++){
sumVar += (1/i);
}
return sumVar;
}
int main(){
int n = 7;
cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n);
return 0;
}
출력 결과
The sum of series till 7 is 2.59286
마무리
이처럼 조화급수의 합은 공식 없이도 간단한 반복문만으로 손쉽게 계산할 수 있습니다. 다만 실수형(float)의 정밀도 한계 때문에 n이 매우 커질 경우 오차가 누적될 수 있으므로, 더 높은 정밀도가 필요하다면 double 자료형을 사용하는 것이 좋습니다.