Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 시리즈 2^0 + 2^1 + 2^2 +...+ 2^n의 합


이 문제에서 2^0, 2^1, 2^2, …, 2^n 계열의 n번째 항을 정의하는 숫자 n이 주어집니다. 우리의 임무는 2^0 + 2^1 + 2^2 +...+ 2^n 시리즈의 합을 찾는 프로그램을 만드는 것입니다.

문제를 이해하기 위해 예를 들어 보겠습니다.

입력

n=6

출력

설명

합 =2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6합 =1 + 2 + 4 + 8 + 16 + 32 + 64 =127 

문제에 대한 간단한 해결책은 루프를 사용하는 것입니다. 0에서 n까지의 각 값에 대해 2^i를 찾아 합계 변수에 추가합니다.

알고리즘

합계 =0초기화 1단계:i =0에서 n까지 반복합니다. 그리고 다음을 따르십시오. 1.1단계:합계 업데이트, 합계 +=2^i.2단계:합계를 인쇄합니다.

예시

솔루션의 작동을 설명하는 프로그램,

#include #include 네임스페이스 std 사용;int calcSeriesSum(int n) { int sum =0; for (int i =0; i <=n; i++) sum +=pow(2, i); 합계 반환;}int main() { int n =11; cout<<"2^0 + 2^1 + 2^2 +...+ 2^"< 

출력

2^0 + 2^1 + 2^2 +...+ 2^11 시리즈의 합은 4095입니다.

이것은 O(n) 차수의 시간 복잡도를 만드는 루프를 사용하므로 이 문제를 해결하는 가장 효과적인 방법은 아닙니다.

더 효과적인 솔루션은 합계에 대한 수학 공식을 사용합니다.

에 의해 제공됩니다.
 2^(n+1) - 1

예시

우리 솔루션의 작동을 설명하는 프로그램

#include #include 네임스페이스 std;int calcSeriesSum(int n) { return ( (pow(2, (n+1)) - 1) );}int main() { 정수 n =11; cout<<"2^0 + 2^1 + 2^2 +...+ 2^"< 

출력

2^0 + 2^1 + 2^2 +...+ 2^11 시리즈의 합은 4095입니다.