While 2147483648 should be filtered out, 2147483648 should not.
I change two lines in your solution and it has been accepted.
The two changes are as follows:

Change
if(sign == 1 && res > (long)Math.pow(2,31)){
toif(sign == 1 && res >= (long)Math.pow(2,31)) {
. 
Change
return Integer.parseInt(String.valueOf(res));
toreturn Integer.parseInt(String.valueOf(res))*sign;