关闭

LeetCode(7) Reverse Integer

标签: LeetCode
6831人阅读 评论(4) 收藏 举报
分类:

本题比较简单,也比较坑爹,

Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321


题目明确提示了你要考虑反转后溢出的的问题。如果溢出了,返回什么都不合适,那就统一返回一个错误代码吧,return -1吧。这样写提交通过

class Solution {
public:
    int reverse(int x) {
        int result=0;
        bool is_positive=x>0?true:false;
        if(!is_positive)
            x=-x;
        while(x>0){
            int add=x-x/10*10;
        //std::cout<<"x="<<x<<",add="<<add<<",result="<<result<<std::endl;
            result=result*10+add;
            x=x/10;
        }
        if(result<0)
            return -1;
        if(!is_positive)
            result=-result;
        return result;
    }
};


但是,如果把下面2行处理溢出的语句删除,也是可以提交通过的。

        //if(result<0)
          //  return -1;


估计是,因为题目没有给定一个统一的错误代码,在遇到溢出情况的时候统一返回,所以OJ也没法制定出一个标准来检测code了。


update1:后来看到一个更好的解决溢出办法在这里  http://blog.csdn.net/stephen_wong/article/details/28779481


update2 : 2014-10-06 简化之前的代码。

因为leetcode没有让人处理溢出,所以这里暂时不处理溢出。(如果要处理,看上面给出的参考链接)。不处理溢出的版本重写后是这样的:

class Solution {
public:
    int reverse(int x) {
        bool is_pos = x > 0;
        x = abs(x);
        int result = 0;
        while (x >= 1) { //逐个地处理x的个位,十位,百位...
            result = result * 10 + x % 10; //注意求个位可以用%,不用像上面那么麻烦。
            x = x / 10;
        }
        if (is_pos) return result;
        else return -result;
    }
};


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1172713次
    • 积分:13238
    • 等级:
    • 排名:第992名
    • 原创:408篇
    • 转载:14篇
    • 译文:0篇
    • 评论:138条
    博客专栏
    最新评论