码迷,mamicode.com
首页 > 其他好文 > 详细

Reverse Integer

时间:2015-12-29 22:51:19      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

 

 Reverse Integer

 

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

 

这道题目主要在考一个数学思想和一个int溢出的问题。起初刚开始做这道题目的时候数学思想虽然是对的,但是语言特别啰嗦。

class Solution {
public:
    int reverse(const int& x) {
        int tmp = x;
        int remain;
        int flag = true;
        std::queue<int > que;

        if (x < INT_MIN || x > INT_MAX)
        {
            return 0;
        }

        if (x < 0)
        {
            flag = false;
            tmp = tmp * (-1);
        }
            
        for (; tmp != 0;)
        {
            remain = tmp % 10;
            tmp = tmp / 10;
            std::cout << remain << std::endl;
            que.push(remain);
        }
        std::cout << "queue.size = " << que.size() << std::endl;
        for (std::queue<int >::size_type i = 0; i < que.size(); )
        {
            remain = que.front();    //获取最后一个元素
            que.pop();
            std::cout << remain << std::endl;
            tmp = tmp * 10 + remain;
        }

        if (flag == false)
            tmp = tmp * (-1);
        return tmp;
    }
};

繁琐的一逼,而且提交总是报错。主要就是int溢出没有处理好。经过观察,发现数学思想表达啰嗦了,重新撸一遍。

class Solution {
public:
    int reverse(int x) {
        int y = 0;
        do {
            y = y * 10 + x % 10;
            x /= 10;
        } while (x);
        return y;
    }
};

想想int溢出还没有处理好,可能是y在中间y*10的时候会出现越界问题,想着在最后判断一下应该就可以了

class Solution {
public:
    int reverse(int x) {
        int y = 0;
        do {
            y = y * 10 + x % 10;
            x /= 10;
        } while (x);

        if (y != 0 && INT_MAX / abs(y) < 10)
            return 0;
        return y;
    }
};

事实证明,想法是错误的,测试结果显示还是存在溢出问题,左思右想,发现犯了一个低级错误。这个判断应该放在循环里面,如果y溢出,计算机就无法正常识别了,我这个猪脑子。

class Solution {
public:
    int reverse(int x) {
        int y = 0;
        do {
            if (y != 0 && INT_MAX / abs(y) < 10)
                return 0;
            y = y * 10 + x % 10;
            x /= 10;
        } while (x);

        
        return y;
    }
};

通过了,好开心,而且效率很高,凸显出了C++的优越性,突出一个快。

Reverse Integer

标签:

原文地址:http://www.cnblogs.com/zlcxbb/p/5087206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!