hdu 1001

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

我的答案:

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

或者

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

但是在网上找了一下,发现别人说这种暴力加法有时候很有可能超过内存限制,所以提高C程序运行效率的方式就是能用数学公式就尽量用。

但是只是把加法换成公式这么简单吗?

sum=n*(n+1)/2;

提交WA,为什么呢?

原因就在于题目上说n和sum是32位整形数据,但是n*(n+1)很有可能就爆了。所以得再加以修改。

#include <stdio.h>
#include <stdlib.h>

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

另外有一个小坑follow a blank line。所以我们得用两个换行符。。。

posted @ 2015-12-14 18:10  小白酷狗  阅读(503)  评论(0编辑  收藏  举报