题目大意:将一个32位的整数颠倒输出,注意如果颠倒后的整数超过了int表示的范围,则输出0
题目分析:首先,明确32位整数可表示的范围是[-2^31,2^31-1]。 当颠倒的数超过这个范围,则输出0.
本题主要使用栈来实现,从高到低位,依次求得每位数,并将其压入栈中。然后将栈中的元素依次弹出,注意前几次若是0,则不考虑,直到出现第一个非零元素,之后出现的零由于不在首位,所以都要考虑在内。
代码展示:
class Solution {
public:
int reverse(int x) {
stack<int>s;
int a;
while(x){
a = x%10;
x = x/10;
s.push(a);
}
long long y = 0;
long long k = 1;
bool flag = false;
while(!s.empty()){
y = y + s.top()*k;
if(s.top()!=0 || flag){
k = k * 10;
flag = true;
}
s.pop();
}
if(y>pow(2,31)-1 || y<-pow(2,31))
y = 0;
return y;
}
};