【C++编程】1+2+3+……+n的累加和的几种方法的复杂度比较

73 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情.

1+2+3+……+n的累加和

1+2+3+...+n的公式是:

1+2+3+...+n

=(1+n)×n/2

=n/2+n²/2

等差数列是指从第二项起,每一项与它的前一项的差等于同一个常数的一种数列,常用A、P表示。这个常数叫做等差数列的公差,公差常用字母d表示。

1.循环法实现累加和

解题思想:  思想很简单,就是循环累加,常规思想,基本操作,但是它的时间复杂度是O(n)级的。

代码实现:

#include <iostream>;
using namespace std;

void main(){
	int i,n,sum=0;
	cout<<"请输入你想要的数字:";
	cin>>n;
	while(n<1){
		cout<<"输入的数字不能满足程序的要求,请重新输入:";
		cin>>n;
	}
	for (i=1;i<=n;i++)
	{
		sum += i;
	}
	cout<<"1……"<<n<<"的累加和为:"<<sum<<endl;
}

效果图展示:

在这里插入图片描述

2.等差数列Sn=[n*(a1+an)]/2实现累加和

解题思想:  根据等差数列公式Sn=[n*(a1+an)]/2实现累加和,简化了变量,但是其时间复杂度还是O(n)级,如果使用Sn=a1n+[n(n-1)*d]/2,定义变量a1,d这样来实现累加和倒是可以把时间复杂度降为O(1)级,实现性能优化,但也相对的增加了内存开销。

代码实现:

void  main()
{
	int n;
	cout<<"请输入你想要的数字:";
	while(cin>>n)
	{
		cout<<"1……"<<n<<"的累加和为:"<<(n*n+n)/2<<endl;
	}
} 

效果图展示: 在这里插入图片描述

其实按照等差数列在这里插入图片描述来进行编程的话,它的时间复杂度要达到O(2)级以上,而用高斯公式[n*(a1+an)]/2,一步到位,它的时间复杂度可以达到O(1)级.