
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
============================================================================================================
基本思路:
对传入的整数判断,大于零可以直接处理,小于零处理0-x,输入超出范围直接return 0;
用是sstream来实现整形和字符串间相互转化: gate:https://www.cnblogs.com/mckc/p/9671017.html
将字符串翻转后再转化为整形输出
转化为整形后记得判断整形是否超过32位,按题目要求,超过就return 0;
转化可以直接用algorithm里面的reserve函数,也可以自己用for来对调;
下面是ac代码:
class Solution {
public: int reverse(int x) {
stringstream ss;
string s1,s2;
int y;
if(x>||x<-)
return ; if(x<){
ss<<x;
ss>>s1;
for(auto s=s1.end()-;s!=s1.begin()-;s--){
s2+=*s;
} ss.clear();
ss<<s2;
ss>>y;
if(y>=)
return ;
return y=-y;
} else{
ss<<x;
ss>>s1;
for(auto s=s1.end()-;s!=s1.begin()-;s--){
s2+=*s;
} ss.clear();
ss<<s2;
ss>>y;
if(y>=)
return ;
return y;
}
} };
或者用reserve:
class Solution {
public: int reverse(int x) {
stringstream ss;
string s1;
int y;
if(x>||x<-)
return ; if(x<){
ss<<x;
ss>>s1;
std::reverse(s1.begin(),s1.end());
ss.clear();
ss<<s1;
ss>>y;
if(y>=)
return ;
return y=-y;
} else{
ss<<x;
ss>>s1;
std::reverse(s1.begin(),s1.end());
ss.clear();
ss<<s1;
ss>>y;
if(y>=)
return ;
return y;
}
}
};