题⽬描述: 反转 ⼀个整数意味着倒置它的所有位。
例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。
给你⼀个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。
如果 reversed2 等于 num ,返回 true ;否则,返回 false 。
• ⽰例 1:
输⼊:num = 526
输出:true
解释:反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num 。
• ⽰例 2:
输⼊:num = 1800
输出:false
解释:反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num 。
• ⽰例 3:
输⼊:num = 0
输出:true 解释:反转 num 得到 0 ,接着反转 0 得到 0 ,等于 num 。
• 提⽰: 0 <= num <= 10^6
解法⼀(直接模拟):
模拟反转过程。
算法思路:
1. 对原数字进⾏两次反转;
2. 判断反转前后是否发⽣变化。
3. 反转前的值与反转后的值相等则返回 ture ,否则返回 false 。
- #include
- bool isSameAfterReversals(int num)
- {
- int n = num;
- int m = 0;
- //将n反转后的值放⼊m
- while (n)
- {
- m = m * 10 + n % 10;
- n = n / 10;
- }
- //跳出循环表⽰n=0,不需要重新赋0
- //将m反转后的值放⼊n
- while (m)
- {
- n = n * 10 + m % 10;
- m = m / 10;
- }
- //判断两次反转后的值是否等于原数字
- return n == num;
- }
解法⼆(数学): 反转后发⽣变化的情况只有反转后存在前导零的情况。第⼆次反转⼀定没有前导零,因为第⼆次反转 的最⾼位与原数字的最⾼位相等,原数字的最⾼位⼀定不是0,所以我们只需要判断第⼀次反转是否 含有前导零,即可判断两次反转后是否发⽣变化。



算法思路:
1. 判断原数字本⾝是否为0,或者个位数是否不为0;
2. 若两个条件都满⾜则返回 true ,否则返回 false 。
- bool isSameAfterReversals(int num) {
- return num == 0 || num % 10 != 0;
- }
c语言bool类型
