一、题目
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
二、代码
采用字符串反转
class Solution {
public:
int reverse(int x) {
if(x==0)
return 0;
string tem="";
stringstream ss;
ss << abs(x);
string str = ss.str();
str.erase(0, str.find_first_not_of('0'));
for (string::reverse_iterator it = str.rbegin(); it != str.rend(); it++)
{
tem += *it;
}
long long num;
stringstream temstr(tem);
temstr>>num;
if(num>0x7fffffff)
num = 0;
return x<0?-num:num;
}
};
快算法:
static int x = []() {
std::ios::sync_with_stdio(false); //cin,cout效率低是因为要把输入、输出的东西存入缓冲区,再输入、输出,导致效率降低。该语句可以来取消iostream的输入、输出缓存,使效率与scanf与printf相差无几。C++为了兼容C,保证程序在使用了std::printf和std::cout的时候不发生混乱,将输出流绑到了一起。
cin.tie(NULL);//默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。
return 0;
}();
class Solution {
public:
int reverse(int x) {
long long answer = 0;
while (x) {
answer = answer * 10 + x % 10;
x /= 10;
}
return (answer > INT_MAX || answer < INT_MIN)?0:(int)answer;
}
};