首页 > 其他 > 详细

HDOJ1001

时间:2014-03-16 21:27:43      阅读:561      评论:0      收藏:0      [点我收藏+]

陷阱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位能表示的范围。

HDOJ1001,布布扣,bubuko.com

HDOJ1001

原文:http://www.cnblogs.com/ct0421/p/3603752.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!