HDU1001
原题为:
Problem Description
Hey, welcome to HDOJ(Hangzhou Dianzi University Online Judge).
In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n.
Input
The input will consist of a series of integers n, one integer per line.
Output
For each case, output SUM(n) in one line, followed by a blank line. You may assume the result will be in the range of 32-bit signed integer.
Sample Input
1
100
Sample Output
1
5050
本题看似为简单的数字的加法,但是考虑到代码提交时会发生执行超时等情况,我们采用高斯算法进行计算。
高斯算法为:(等差数列求和公式)
Sn=(a1+an)n/2
Sn=n(2a1+(n-1)d)/2;
d=公差 Sn=An2+Bn; A=d/2,B=a1-(d/2)
可执行的一种代码为
#include<stdio.h>
int main()
{
int n,sum;
while(scanf("%d",&n)!=EOF){
if(n%2==0)
sum=n/2*(1+n);
else
sum=(1+n)/2*n;
printf("%d\n\n",sum);
}
return 0;
}
需要注意的是输出结果时需要有一行空格;需要考虑输入数的奇偶性,否则会发生溢出现象,若有时间也可尝试没有分奇偶时,输出结果,在这里就不一一列出;我们在打代码时可以适当注意下国际输出格式。