序列求和 C语言
问题描述
求1+2+3+…+n的值。
输入格式
输入包括一个整数n。
输出格式
输出一行,包括一个整数,表示1+2+3+…+n的值。
样例输入
4
样例输出
10
样例输入
100
样例输出
5050
数据规模与约定
1 <= n <= 1,000,000,000。
说明: 请注意这里的数据规模。
本题直接的想法是直接使用一个循环来累加,但需要注意的是,整型int并不能容下1000,000,000,所以应该使用long long来代替,具体代码如下:
#include <stdio.h>
int main() {
long long n,i,sum;
scanf("%I64d",&n);
for(i=1;i<=n;i++)
{
sum+=i;
}
printf("%I64d",sum);
return 0;
}
这种方法简单粗暴,难度最小,但是这种”暴力法“往往会造成很大的延时,用这种方法运行1000,000,000时,笔者的电脑需要7秒多!所以一般不推荐这种方法。
另一种方法是先将要算的内容公式化,比如这道题,可以直接使用前n项和序列公式进行简化,公式为:n* (n+1)/2
代码如下:
#include <stdio.h>
int main() {
long long n,i,sum;
scanf("%I64d",&n);
sum=n*(n+1)/2;
printf("%I64d",sum);
return 0;
}
另外%I64d是long long类型的输出格式,笔者也是在这道题下面的提示中了解到这种操作的。