hdu1001

今天第一次去刷题,本科荒废的编程现在要从新拾起来,从刷题开始吧。大学本科没写过多少代码,现在读研了明显感觉压力很大,所以不得不开始练习了,学习永远不晚,知道自己的短处想办法弥补也算是幸运的事情,可惜现在的大学生都不明白自己缺啥。

废话不多少了,先讲讲做题的感受吧。其实大一是有机会参加ACM比赛的,但是错过了,这一错过了可改变了以后的路啊。现在算是主动示好ACM,也不知道怎么练习,就从简单的开始吧,如果大神读到这篇文章,可以为小弟提一点建议。

说题目吧,从hdu1001开始,一道简单的求和题目,但有一个小的陷阱,先亮题目吧。

Problem Description
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
100
Sample Output

5050
题目涉及的算法不难,大部分人都能想到公式:n*(n+1)/2,如果直接用这个公式计算结果,会得到wrong answer.为什么呢?注意题目有一句话,红色部分,计算结果必须是32位,所以直接用公式会出现益处的可能,所以在算法实现上有一个小改变,如下:
#include <stdio.h>

int main()
{
    int n;
    int result;
    while (scanf("%d", &n)!=EOF){
        if (n % 2 == 0)
            result = n / 2 * (n + 1);
        else
            result = (n + 1) / 2 * n;
        printf("%d\n", result);
        printf("\n");
    }

}
这样就能Ac了。另外一种方法就是用一个循环求和,主要注意的地方就是不要超出32位。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值