1、这道题WA疯了,原来是因为计算8*n的时候溢出了(n最大可达1000000000)。所以单独转换为double型即可。
2、当题目给出的数字很大时,不但要注意数字本身是否会溢出,还要顾及中间计算过程中是否溢出!
#include <stdio.h>
#include <math.h>
int main(void)
{
int num,k,sum,n;
double temp;
scanf("%d",&num);
while(num--)
{
scanf("%d",&n);
if(n==0){printf("3\n");if(num>0) printf("\n");continue;}
if(n<0) n=n*(-1);
temp=1.0+8*(double)n;
k=(int)((-1.0+sqrt(temp)/2)+0.5);
while(1)
{
sum=(k*(k+1))/2;
if(sum>=n&&(sum-n)%2==0)
{printf("%d\n",k);if(num>0) printf("\n");break;}
else k++;
}
}
return 0;
}