回文数
- 0.题目
- 1.WJQ的思路
- 2.实现过程
- 2.0 原始值怎么一个个取出来?
- 2.1 取出来的数如何存到新的数字后面?
- 2.2完整的反转得到新数的过程
- 3.完整的代码
- 4.可运行的代码
- 5.算法还可以优化的部分
0.题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
1.WJQ的思路
思路可行,如何实现?
2.实现过程
2.0 原始值怎么一个个取出来?
取高位 x=x/10
除以10再取整
取低位 x=x%10
除以10再取余
原始值从最低位开始取,新的数从最高位开始存
2.1 取出来的数如何存到新的数字后面?
reversed = reversed * 10 + x % 10;
对于新的数字,我将原有的数字乘10加上取余得到的数
2.2完整的反转得到新数的过程
int original = x; // 存储原始值
long reversed = 0; // 反转后新的数while (x != 0) {reversed = reversed * 10 + x % 10;x /= 10; //只是x=x/10的缩写形式,没什么高端的意思}
3.完整的代码
bool isPalindrome(int x) {int original = x; // 存储原始值long reversed = 0; // 用长整型防止溢出// 反转整数while (x != 0) {reversed = reversed * 10 + x % 10;x /= 10;}// 比较反转后的值与原始值return original == reversed;
}
4.可运行的代码
#include <iostream>bool isPalindrome(int x) {// 负数不是回文数if (x < 0) return false;int original = x; // 存储原始值long reversed = 0; // 用长整型防止溢出// 反转整数while (x != 0) {reversed = reversed * 10 + x % 10;x /= 10;}// 比较反转后的值与原始值return original == reversed;
}int main() {int number;std::cout << "Enter a number: ";std::cin >> number;if (isPalindrome(number)) {std::cout << number << " is a palindrome." << std::endl;} else {std::cout << number << " is not a palindrome." << std::endl;}return 0;
}
5.算法还可以优化的部分
- 负数能直接判断不是回文数
- 两边都只判断一半