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
广告