题目链接——反转整数 代码示例:
class Solution {
public:
int reverse(int x)
{
int ret =0;
while(x)
{
//有符号整数溢出
//如果这个数比最小的数去掉一位要小,或者比最大的数去掉一位要大
//那么将他*10后得到的最后结果肯定是要大(小),肯定溢出了。
//并且要先在*10之前判断,否则就溢出了
if (ret > INT_MAX / 10 || ret < INT_MIN / 10)
{
return 0;
}
ret = ret*10+x%10;
x /=10;
}
return ret;
}
};
题解:
INT_MAX和INT_MIN为C++内宏定义,分别表示int的最大值和最小值。
定义ret为反转后的数,初始化为0
x%10取到最后一位上的数
x/10去掉最后一位上的数
相关解释:
开始的ret为0
x %10将原来x的最后一位取出来,放到ret中,这个数就是ret最终结果的第一位。
现在的ret是这个一位数,
将它*10,变成几十,ret变成两位数,刚才取出来的这个数到了十位上,个位上是0,
个位就被空了出来,
之前的x已经被去掉了最后一位,现在的x最后一位为原来x的倒数第二位,x %10,取到新的最后一位,
加到ret中,得到新的ret
重复上述步骤:
...
例: x = 123
ret = 0 * 10 + 123 % 10 = 3
x = 12
ret = 3 * 10 + 12 % 10 = 30 + 2 = 32
x = 1
得到结果
ret = 32 * 10 + 1 % 10 = 321
评论区