C++ 中 2^0 + 2^1 + 2^2 +...+ 2^n 級數的和
在這個問題中,我們給定一個數字 n,它定義了級數 2^0、2^1、2^2、…、2^n 的第 n 項。我們的任務是建立一個程式來找到級數 2^0 + 2^1 + 2^2 +...+ 2^n 的和。
讓我們舉個例子來理解這個問題,
輸入
n=6
輸出
解釋
sum = 2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 sum = 1 + 2 + 4 + 8 + 16 + 32 + 64 = 127
解決該問題的一個簡單方法是使用迴圈。找到每個從 0 到 n 的值的 2^i,並將其新增到 sum 變數中。
演算法
Initialize sum = 0 Step 1: Iterate from i = 0 to n. And follow : Step 1.1: Update sum, sum += 2^i. Step 2: Print sum.
示例
程式說明我們解決方案的工作原理,
#include <iostream>
#include <math.h>
using namespace std;
int calcSeriesSum(int n) {
int sum = 0;
for (int i = 0; i <= n; i++)
sum += pow(2, i);
return sum;
}
int main() {
int n = 11;
cout<<"Sum of the series 2^0 + 2^1 + 2^2 +...+ 2^"<<n<<" is "<<calcSeriesSum(n);
return 0;
}輸出
Sum of the series 2^0 + 2^1 + 2^2 +...+ 2^11 is 4095
這不是解決此問題的最有效方法,因為它使用了迴圈,這使得其時間複雜度為 O(n) 級別。
一個更有效的解決方案,我們將使用求和的數學公式。它由下式給出
2^(n+1) - 1
示例
程式說明我們解決方案的工作原理,
#include <iostream>
#include <math.h>
using namespace std;
int calcSeriesSum(int n) {
return ( (pow(2, (n+1)) - 1) );
}
int main() {
int n = 11;
cout<<"Sum of the series 2^0 + 2^1 + 2^2 +...+ 2^"<<n<<" is "<<calcSeriesSum(n);
return 0;
}輸出
Sum of the series 2^0 + 2^1 + 2^2 +...+ 2^11 is 4095
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP