C++ 数列5+55+555+..的前n项和
数列5, 55, 555, …可以由几何级数推导出来,并且可以利用几何级数公式进行计算。
几何级数是一种每个后续项都是其前一项与某个特定项(比值)的乘积的级数类型。我们将利用几何级数的知识,来找到给定数列的和。
问题陈述
给定一个数n,找出数列5+5+555+…的前n项和。
示例
Input − N = 3
Output − 595
解释
5 + 5 + 555 = 595.
Input − N = 5
Output − 61716
解释
5 + 5 + 5 + 5 + 5 = 61716.
解决方案
Let sum = 5 + 55 + 555 +… n terms.
This is not GP, but we can relate it to GP in the following manner:
= 5(1) + 5(11) + 5(111) + … n terms
Taking 5 common:
= 5[1 + 11 + 111 + …n terms]
Divide and multiply by 9:
= 5/9[9 + 99 + 999 + … n terms]
= 5/9[(10 – 1) + (100 – 1) + (1000 – 1) + … n terms]
= 5/9[(10^1 – 1) + (10^2 – 1) + (10^3 – 1) + … n terms]
= 5/9[10^1 + 10^2 + 10^3 ...n terms – (1 + 1 + … n times)]
= 5/9[10^1 + 10^2 + 10^3 ...n terms – n]
We will solve (10^1 + 10^2 + 10^3 ...n terms) as following:
We can observe that it is a GP, where the first term a = 10.
And the common ratio r = 10^2/10 = 10.
Hence, the GP formula:
Sum of n terms = a(r^n-1) / (r-1) (where r>1)
Putting the values of r and a:
10^1 + 10^2 + 10^3 ...n terms = 10(10^n-1)/(10-1)
Substituting the values:
5/9[10^1 + 10^2 + 10^3 ...n terms – n]
= 5/9[10(10n-1)/(10-1) – n]
= 50/81(10n – 1) – 5n/9
我们可以使用上面的公式来编程解决方案。
伪代码
主函数():
- 初始化 n 为 5。
-
调用函数:sumOfSeries(n)
sumOfSeries(int n):
- product = 0.6172 * (pow(10,n)-1) – 0.55 * n
-
打印 product
示例
下面是一个用于找到序列 5 + 55 + 555…..n 的和的 C++ 程序
#include <bits/stdc++.h>
using namespace std;
// Function to calculate the
// the sum of series
int sumOfSeries(int n){
int product = 0.6172 * (pow(10,n)-1) - 0.55 * n;
return product;
}
int main(){
//Input
int n = 5;
//Function call to calculate the sum of series
cout << "Given Series; 5 + 55 + 555 + ..." << endl;
int answer = sumOfSeries(n);
//Print the answer
cout << "Sum up to 5 terms: " << answer<< endl;
return 0;
}
输出
Given Series; 5 + 55 + 555 + ...
Sum up to 5 terms: 61716
分析
时间复杂度 − O(log n)。
由于幂函数的存在,该程序的时间复杂度是对数的。
空间复杂度 − O(1)。
由于没有使用额外的空间,空间复杂度是常数。
结论
在本文中,我们讨论了找到序列5+55+555+…直到n项的和的问题。n由输入给出。
我们使用等比数列求和的方法解决了该序列,并编写了伪代码和C++程序。