这道题原来写的代码是这样的
#include<stdio.h>
int main()
{
int n,sum;
while(scanf("%d",&n)!=EOF)
{
sum=n*(n+1)/2;
printf("%d\n\n",sum);
}
return 0;
}
这样写乍看之下是很好的,但存在一个问题:在n*(n+1)乘法的时候,会溢出。题述“You may assume the result will be in the range of 32-bit signed integer ”,即指求和结果是32位有符号整数。OJ给出的测试数据的求和结果(n*(n+1)/2)一定是32位整数范围内的,但是(n*(n+1))就不一定了。故提交时总是会WA。
故可以将代码改成
#include<stdio.h>
int main()
{
int n,sum;
while(scanf("%d",&n)!=EOF)
{
sum=n/2.0*(n+1);
printf("%d\n\n",sum);
}
return 0;
}
这样就避免了溢出的问题。
另外,也可以从1累加到n,也不会出现溢出的问题了。