开启掘金成长之旅!这是我参与「掘金日新计划 · 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)级.