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

C++로 구현하는 급수 1 + x/1 + x²/2 + x³/3 + ... + xⁿ/n의 합 계산 방법

이 문제에서는 수학적 급수를 나타내는 두 개의 값 x와 n이 주어집니다. 우리의 과제는 1 + x/1 + x²/2 + x³/3 + ... + xⁿ/n 형태의 급수 합을 구하는 프로그램을 작성하는 것입니다.

예시를 통한 문제 이해

입력

x = 2, n = 4

출력

11.666

설명 −

sum = 1 + 2/1 + (2²)/2 + (2³)/3 + (2⁴)/4
    = 1 + 2 + 4/2 + 8/3 + 16/4
    = 1 + 2 + 2 + 8/3 + 4
    = 9 + 8/3
    = 11.666...

해결 접근 방식

가장 간단한 해결 방법은 기준값 x와 범위 n을 이용해 급수의 각 항을 차례대로 생성하고, 이를 모두 더한 뒤 최종 합계를 반환하는 것입니다. 즉, 반복문을 사용해 i번째 항인 xⁱ/i 값을 하나씩 누적하면 됩니다.

예제 코드

다음 프로그램은 위 해결 방법의 실제 동작을 보여줍니다.

#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
double calcSeriesSum(int x, int n) {
    double i, total = 1.0;
    for (i = 1; i <= n; i++)
        total += (pow(x, i) / i);
    return total;
}
int main() {
    int x = 3;
    int n = 6;
    cout<<"Sum of the Series 1 + x/1 + x^2/2 + x^3/3 + .. + x^"<<n<<"/"<<n<<" is "<<setprecision(5) <<calcSeriesSum(x, n);
    return 0;
}

출력 결과

Sum of the Series 1 + x/1 + x^2/2 + x^3/3 + .. + x^6/6 is 207.85

코드 설명

calcSeriesSum 함수는 합계를 저장할 변수 total을 1.0으로 초기화합니다. 이는 급수의 첫 번째 항이 상수 1이기 때문입니다. 이후 반복문을 통해 i가 1부터 n까지 증가할 때마다 pow(x, i) / i, 즉 xⁱ/i 값을 total에 누적합니다. 여기서 pow() 함수는 math.h 헤더에 정의되어 있으며 거듭제곱 연산을 수행합니다.

main 함수에서는 x = 3, n = 6을 입력값으로 전달하고, setprecision(5)를 사용해 결과를 유효숫자 다섯 자리 정밀도로 출력합니다. 이 알고리즘의 시간 복잡도는 O(n)으로, n이 커져도 효율적으로 동작합니다.