题目背景:反转 一个整数意味着倒置它的所有位。
例如,反转 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
来源:力扣(LeetCode)
思路:重复对num取模从而取数,再乘上10的相应次方最后把各部分相加起来得到反转后的数字,使用了递归简化了繁杂的过程。
示例代码:
#include<iostream>
#include<cmath>
using namespace std;
class Solution {
public:
bool isSameAfterReversals(int num)
{
int count = 1, tmp = num;
while (tmp /= 10)
{
count++;
}
int a = reverse(num, count);
int count2 = 1, temp = a;
while (temp /= 10)
{
count2++;
}
int b = reverse(a, count2);
if (num == b) return true;
else return false;
}
int reverse(int num, int count)
{
static int i = 1;
if (count == 1)
{
return num;
}
else
{
return ((num % 10) * pow(10, count - 1) + reverse(num / 10, count - 1));
}
}
};
int main()
{
int a = 1800;
Solution s;
cout << s.isSameAfterReversals(a);
return 0;
}