LeetCode之Reverse Integer
题目描述
给一个32bit的整型数据,倒置输出,整数的范围是:[-2^32 - 1,2^32-1],倒置后的整数可能会溢出,如果溢出则输出结果为0。
举例:
输入:123 -123 1534236469(倒置后溢出)
输出:321 -321 0
解决思路
- (1)算术:从最低位开始分离出数字,之前的结果乘10再加上分离的数字实现倒置
- (2)转为string处理
c/c++中各种类型int、long、double、char、表示范围(最大最小值)如下图所示:
来自博文:(https://blog.youkuaiyun.com/xuexiacm/article/details/8122267)
可见int的最大值是:2147483647,最小值是:-2147483648
也可以使用c类库(limits.h)的INT_MIN、INT_MAX,如下图所示:
代码实现
- (1)算术:
int reverse(int x) {
int temp;
int result = 0;
while(x){
temp = x % 10;
x = x / 10;
//整型最大值:2147483647
if (result > INT_MAX / 10 || (result == INT_MAX / 10 && temp > 7)) return 0;
//整型最小值:-2147473648
if (result < INT_MIN / 10 || (result == INT_MIN / 10 && temp < -8)) return 0;
result = result * 10 + temp;
}
return result;
}
- (2)转为string处理
int reverse(int x) {
int flag = 0;
int result;
if(x == 0)
return 0;
else if(x <= INT_MIN || x >= INT_MAX)
return 0;
else {
if (x < 0){
flag = 1;
x = -x;
}
string str_x = to_string(x);
string temp;
for(auto it = str_x.cend()-1;it != str_x.cbegin()-1;it--)
temp += *it;
double z = atof(temp.c_str());
if(z > INT_MAX || z < INT_MIN)
return 0;
else
result = (int)z;
}
if(flag)
result = -result;
return result;
}
欢迎指正,如转载请注明出处