1、stack
class Solution {
public:
int reverse(int x) {
if((x==0)||(x==-2147483648)){
return 0;
}
bool flag=(x<0);
x = abs(x);
int r;
stack<int> s;
while(x){
div_t dr=div(x,10);
x=dr.quot;
r=dr.rem;
s.push(r);
}
int re=s.top(),d=10;
s.pop();
while(!(s.empty())){
r = s.top();
if((re>147483647)&&(r>=2)){
return 0;
}
if(flag&&(re>147483648)&&(r>=2)){
return 0;
}
s.pop();
re+= r*d;
d*=10;
}
if(flag){
return -re;
}
else{
return re;
}
}
};
2、vector
class Solution {
public:
int reverse(int x) {
if(x==0){
return 0;
}
if(x==-2147483648){
return 0;
}
bool flag=(x<0);
x = abs(x);
int y=x;
vector<int> v;
int r;
while(y){
div_t dr=div(y,10);
y=dr.quot;
r=dr.rem;
v.push_back(r);
}
int n=v.size();
double result=v[0];
for(int i=1;i<n;++i){
result=result*10+v[i];
}
if(flag&&(result>2147483648)){
return 0;
}
if(result>2147483647){
return 0;
}
if(flag){
return -int(result);
}
else{
return int(result);
}
}
};
void main()
{
//int x=1234567809,y;
int x=-1563847412,y;
//int x=-2147483648,y;
Solution So;
y=So.reverse(x);
cout<<y<<endl;
}