您的位置:首页 > 编程语言 > C语言/C++

[C++]Reverse Integer整数翻转

2015-08-24 12:43 423 查看
leetcode 原题链接:https://leetcode.com/problems/reverse-integer/

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321
简要分析:此题并不难,但是要注意几个点,比如负数翻转之后还是负数,要考虑溢出的问题,这里没有说明,但是根据测试的结果,当数据溢出的时候,返回值是0。由于有数据溢出的可能性,我们这里就不能简单的用整数来表示了。可以采用一个范围更大的整数类型来表示,比如long; 或者直接采用字符串来表示,我就是采用后者来操作的。这样针对更大范围的整数只需要修改一些常量就可以通用了。

实现代码:

class Solution
{
public:
int reverse(int x)
{
string sx = "";
int flag = 1;
if (x >= 0)
{
while (x != 0)
{
sx = char('0' + x % 10) + sx;
x /= 10;
}
} else
{
flag = -1;
while (x != 0)
{
sx = char('0' - x % 10) + sx;
x /= 10;
}
}
string sr = "";
for (int i = 0; i < sx.size(); i++)
{
sr = sx[i] + sr;
}
if (flag > 0 && strCompare(sr, "2147483647"))
{
return 0;
}
if (flag < 0 && strCompare(sr, "2147483648"))
{
return 0;
}
int ans = 0;
for (int i = 0; i < sr.size(); i++)
{
ans = ans * 10 + (sr[i] - '0');
}
return flag*ans;
}

bool strCompare(string s1, string s2)
{
/*
s1 >= s2 返回true
s1 < s2 返回false
*/
if (s1.size() > s2.size())
return true;
else if (s1.size() < s2.size())
return false;

return s1 > s2;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息