思路:
利用字符串存入数组再取出,太繁琐,利用%、/取出int每一位上的数字,再利用a=a*10+num/10;求和得出反转数字,注意正负数对a值无影响。关键点在于处理整数溢出,这也是我一开始总是报错的地方。
是不是首先想到了查看int类型的数值范围:假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1]。
void test(){
int a = 964632435;
a = a * 10;
cout<<a<<endl;//1056389758}
可见这个方法不可行,发生溢出后,数据已经改变了,通常是通过丢位操作使得值在int范围内。INT_MAX=0x7FFFFFFF,INT_MIN=0x7FFFFFFF+1。涉及乘法的时候应该用INT_MAX/10。
class Solution {
public:
int reverse(int x) {
long int a=0;
int y=x;
while(y)
{if((a>INT_MAX/10)||(a<INT_MIN/10)) return 0;
a=10*a+y%10;
y/=10;
}
return a;
}
};
python做法有点晕,还是等C++熟练一些再来填坑。