这一题主要是边界的控制,自己没想出什么好办法,就是用long long型res,来比较int32型的最大值,如果结果大于int32的max,则返回0,否则返回res。
看到leetcode上提供的解法,结果res为int32型,每次循环时累计计算后,判断(res-余数)/10是否==0,如果不是,说明溢出,则返回0,否则继续循环,最后返回。
我的代码:
int reverse(int x) {
int maxInt = INT_MAX;
if (x > maxInt||x<-maxInt) return 0;
long long res=0;
vector<int> numarray;
while (x!=0)
{
numarray.push_back(x % 10);
x = x / 10;
}
int len = numarray.size()-1;
for (auto num : numarray)
{
res += num*pow(10, len);
len--;
if (res > maxInt || res<-maxInt) return 0;
}
return res;
}
leetocde上提供的:
int reverse(int x) {
int result = 0;
while(x!=0){
int tail = x%10;
int newResult = result*10+tail;
if((newResult-tail)/10 != result){
return 0;;
}
result = newResult;
x = x/10;
}
return result;
}