이 문제에서 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입니다.