题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析
- 将整数转换成字符串,然后将字符串倒序,再将字符串转换为整数。需要考虑什么呢?倒序后整数溢出,以及负数应该怎么处理
- 数学法,只需要知道取余数和取商的区别,即可简单实现倒序。
实现
转字符串
class Solution {
public:
int reverse(int intA) {
long long re = 0;
bool IsMinus = false;
if (intA < 0)
{
IsMinus = true;
}
if (intA > INT_MAX)
{
return 0;
}
bool IsZero = true;
string strA = to_string(intA);
string strRe;
for (int i = strA.size() - 1; i >= 0; i--)
{
int a = strA.at(i);
if (a == 0 && IsZero)
{
continue;
}
IsZero = false;
strRe += strA.at(i);
}
re = atoll(strRe.c_str());
if (re > INT_MAX)
{
return 0;
}
return IsMinus ? -re : re;
}
};
数学法
class Solution {
public:
int reverse(int intA) {
//使用long long类型,防止反转后溢出。
long long re = 0;
if (intA > INT_MAX)
{
return 0;
}
if (intA == INT_MIN)
{
return 0;
}
bool blnISMinus = false;
if (intA < 0)
{
blnISMinus = true;
intA = -intA;
}
int digit = 0;
while (intA > 0)
{
digit = intA % 10;
intA /= 10;
re = re * 10 + digit;
}
if (re > INT_MAX)
{
return 0;
}
return blnISMinus ? -re : re;
}
};