题目: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
思路:
先将有符号整数各个位置上的数提取出来,通过栈,达到反转的效果。
public class Solution {
public int Reverse(int x) {
int k = 1;
int i;
if (x < 0)
i = -x;
else
i = x;
while (i>=10)
{
i = i / 10;
k++;
}
i = x;
Stack<int> S=new Stack<int>();
for(int j=k;j>0;j--)
{
int a = i / (int)(Math.Pow(10,j-1));
S.Push(a);
i = i - a * (int)(Math.Pow(10, j - 1));
}
long T = 0;
while(k>0)
{
long MAX = (int)(Math.Pow(2, 31)) - 1;
long MIN = -(int)(Math.Pow(2, 31));
double t=S.Pop() * (Math.Pow(10, k-1));
//if (t > MAX||t<=MIN)
// break;
T = T + (int)t;
if(T>=MAX||T<=MIN)
break;
if(T!=0)
{
if((x/Math.Abs(x))!=(T/Math.Abs(T)))
break;
}
k--;
}
if(k>0)
return 0;
return (int)T; ;
}
}