数的反转
问题描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:输入: -123
输出: -321
示例 3:输入: 120
输出: 21
注意:假设我们的环境只能存储得下
32 位
的有符号整数,则其数值范围为 [$−2^{31}$, $2^{31} − 1$]。请根据这个假设,如果反转后整数溢出那么就返回 0。
问题分析
此处应该考虑数据溢出的可能,对于本数据若是溢出则返回0,选择适合的数据类型是一个重要问题。
代码实现
class Solution { |
运行结果
输入
123
输出
321
总结
本次对数的反转采用将原数逐一从末尾拆分,从首位拼接新数。数据溢出控制采用
int
类型的上下限——INT_MAX
与INT_MIN
加以控制。因为
int
占4字节32位,根据二进制编码的规则INT_MAX = $2^{31}$-1
INT_MIN= -$2^{31}$
C/C++中,所有超过该限值的数,都会出现溢出,出现
warning
,但是并不会出现error
。
注意:有符号(signed)数最高位为符号位,在无溢出(overflow、underflow)的情况下,其符号位不变,符号也就不变。