c语言练习70:反转两次的数字

反转两次的数字

题⽬描述: 反转 ⼀个整数意味着倒置它的所有位。

例如,反转 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,所以我们只需要判断第⼀次反转是否 含有前导零,即可判断两次反转后是否发⽣变化。

前导零

c语言练习70:反转两次的数字_第1张图片

c语言练习70:反转两次的数字_第2张图片

c语言练习70:反转两次的数字_第3张图片

算法思路:

1. 判断原数字本⾝是否为0,或者个位数是否不为0;

2. 若两个条件都满⾜则返回 true ,否则返回 false 。

bool isSameAfterReversals(int num) {
	return num == 0 || num % 10 != 0;
}

c语言bool类型

c语言练习70:反转两次的数字_第4张图片 

c语言练习70:反转两次的数字_第5张图片

你可能感兴趣的:(c语言,算法,数据结构)