关闭

【杭电OJ从头刷】HDU1001

86人阅读 评论(0) 收藏 举报
分类:

http://acm.hdu.edu.cn/showproblem.php?pid=1001

#include<stdio.h>
int main()
{
	int i,n;
	while(scanf("%d",&n) !=EOF)
	{
		int sum=0;
		for(i=1;i<=n;i++)
		{
			sum+=i;
		}
		printf("%d\n\n",sum);
	}
}

#include<stdio.h>
int main()
{
	int n;
	long result;
	while(scanf("%ld",&n) !=EOF)
	{
		if(n%2==0)
		{
			result = n/2*(1+n);
		}
		else
		{
			result = (1+n)/2*n;
		}
		printf("%ld\n\n",result);
	}
}

由题意可知,计算的结果不会超过32bit,我们很容易想到的方法就是直接使用for循环相加求和。

另一种方法就是使用等差数列的求和公式,然而存在的问题就是在进行 n*(n+1) 运算的时候,可能会超出存储的范围,所以我们可以考虑,先进行除法运算,这样就保证了结果的合法性。

最后我们需要注意的一点就是,该题的输出格式为每条数据后需要进行两次换行。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1818次
    • 积分:150
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类