首先对输入的x取绝对值,再用(1+a)*a/2<= x,求出最大的a, 若(1+a)*a/2 == x直接输出a,否则 e = x - (1+a)*a/2;
1.如果a + 1-e是偶数那么可以在1到a中取一个数(-e+a+1)/2往左走,输出a+1
2.如果-e+a+1是奇数,那么-e+2*a+3是偶数的话在1到a+1中取一个数(-e+2*a+3)/2往左走,输出a+2
3.若-e+2*a+3是奇数,那么-e+3*a+6一定偶数,那么输出a+3
#include <bits/stdc++.h>
#define maxn 505
#define MOD 1000000007
using namespace std;
typedef long long ll;
int main(){
ll a, b;
scanf("%I64d", &a);
a = abs(a);
b = (-1 + sqrt(1+8 * a)) / 2;
ll h = (1 + b) * b / 2;
if(h == a){
printf("%I64d\n", b);
}
else{
ll e = a - h;
e = b + 1 - e;
b++;
if(e % 2 == 0){
printf("%I64d\n", b);
}
else if((e + b + 1) % 2 == 0){
printf("%I64d\n", b+1);
}
else{
printf("%I64d\n", b+2);
}
}
return 0;
}