颠倒整数
英文描述
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
中文描述
给定一个范围为 32 位 int 的整数,将其颠倒。
例 1:
输入: 123
输出: 321
例 2:
输入: -123
输出: -321
例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能处理 32 位 int 范围内的整数。根据这个假设,如果颠倒后的结果超过这个范围,则返回 0。
使用stl库的std::string解题:
int reverse(int x)
{
int value = 0;
int maxNumber = 2147483647;
int minNumber = -2147483648;
if (x == minNumber)
{
// 输入为最小负数 返回0
return value;
}
string maxNumStr = to_string(maxNumber);
bool isBigThanZero = (x > 0);
// 将int数转为字符串
string numString = to_string(abs(x));
// 翻转string
std::reverse(numString.begin(), numString.end());
if (numString.length() == maxNumStr.length())
{
// 字符串比较
if (numString.compare(maxNumStr) > 0)
{
return 0;
};
}
int multiplier = 1;
for (int index = numString.length() - 1; index >= 0; index--)
{
if (index == numString.length() - 1)
{
value = numString[index] - '0'; // 个位数
}
else
{
multiplier = multiplier * 10;
value += multiplier*(numString[index] - '0');
}
}
return isBigThanZero ? value : -value;
}