转自:https://blog.csdn.net/qq_40941722/article/details/107942259
思路
反转数字是个很简单的问题,只需不断取模累乘即可,int
正数的范围是2147483647
,负数的范围为-2147483648
当把这个数反转时,大于2147483647
,则 会发生溢出,所以这道题的关键在于判断是否溢出。
正数有如下几种情况:
res < INT_MAX/10
,这种情况无论t
为多大,都不会溢出;
res > INT_MAX/10
,这种情况无论t
为多小,一定会溢出;
res == INT_MAX/10
,其中INT_MAX=2147483647
,所以当t>7
时,会发生溢出;负数有如下几种情况:
res > INT_MIN/10
,这种情况无论t
为多大,都不会溢出;
res < INT_MIN/10
,这种情况无论t
为多小,一定会溢出;
res == INT_MIN/10
,这种情况t若为-9
,一定会溢出;
# include<iostream>
using namespace std;
int reverse(int x) {
int res = 0;
int p;
int Max = 214748364;//MAX=2147483647
int Min = -214748364;//MIn=-2147483648
while (x) {
p = x % 10;
x /= 10;
if ((res > Max)||(res == Max && p > 7))return 0;//正数
if ((res < Min)||(res==Min&&p<-8))return 0;//负数
res = res * 10 + p;
}
return res;
}
int main(void) {
cout << reverse (123)<< endl;
return 0;
}