[C++]Reverse Integer整数翻转

来源:互联网 发布:专业网站美工 编辑:程序博客网 时间:2024/06/06 05:36

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 返回trues1 < s2  返回false*/if (s1.size() > s2.size())return true;else if (s1.size() < s2.size())return false;return s1 > s2;}};


0 0
原创粉丝点击