The idea here is that, in every check, the value range shrinks by 2. I use double to store the range to make it precise.

Until result is 0, the number is found.

```
public int guessNumber(int n) {
if(guess(1) == 0) return 1;
//n indicate next check point, which is located at the middle of that range
int res = guess(n);
double range = (n+1)/2;
while(res != 0){
switch(res){
case 1:
n += range;
break;
case -1:
n -= range;
break;
}
res = guess(n);
//range+1 includes the edge
range=(range+1)/2;
}
return n;
}
```