反转两次的数字
题⽬描述: 反转 ⼀个整数意味着倒置它的所有位。
例如,反转 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<stdbool.h>
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类型