HDOJ1001

陷阱1: 输出两个空行

陷阱2: 使用求和公式

 

看两段代码:

第一段:利用循环 

int n,sum;

while(scanf("%d", &n) !=EOF)

{

    sum=0;

    while(nsum+=n--;

    printf("%d\n\n",sum);

}

 

第二段:利用求和公式

 

int n,sum;

while(scanf("%d", &n) !=EOF)

{

    printf("%d\n\n", n*(n+1)/2);

}

 

You may assume the result will be in the range of 32-bit signed integer. 这句话是个陷阱。

S(n)的值不会超过32位的有符号整数,即2^31-1=MAX。我们如果定义int型的变量 n 来表示输入的数字。

代码二中的bug:当数列的和等于MAX的时候,那么n*(n+1)为2*MAX,超过了32位能表示的范围。

posted @ 2014-03-16 20:08  FREE小宝  阅读(254)  评论(0编辑  收藏  举报