标签:
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++的优越性,突出一个快。
标签:
原文地址:http://www.cnblogs.com/zlcxbb/p/5087206.html