Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 조화급수 1 + 1/2 + 1/3 + ... + 1/n의 합 구하기

이 문제에서는 하나의 숫자 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 자료형을 사용하는 것이 좋습니다.