class Solution { public: int reverse(int x) { long long ret=0; long long cmp1=((long long)1<<31)-1; long long cmp2=-cmp1-1; while(x!=0) { ret=ret*10+x%10; if((ret>cmp1)||(ret<cmp2)) return 0; x/=10; } return ret; } };
注意不能直接写1<<32,因为默认1是int的,然后-优先级高于<<,用括号吧
用long long cmp1=((long long)1<<31)-1;
这题感觉描述的有问题,我还以为是输入范围也在-2^32 - 2^32-1,结果错了一次....
#include<limits.h>
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)
32位情况,C中int类型是32位的,范围是-2147483648到2147483647 。