题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例:
输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
解答
一共需要解决两个问题
1.怎么把整数x中各个数单拎出来表示
2.设置循环判断第i位和n-i-1位是否相等
#include<stdio.h>
#include <iostream>
using namespace std;
class Solution {
public:
bool isPalindrome(int x) {
int digit, power, t;
int n = 0;
int num[1000] ;
int flag = 1;
if (x < 0)
return false;
else {
//先将x存储进数组
power = 1;//最高位
t = x;
while (t >= 10) { //主要作用是获取一共几位,比如power=1000,表示一共是一个四位数,即最高位为千位数
power *= 10;
t /= 10;
};
while (power >= 1) { //通过/和%从前往后获取每一位,存在digit中
digit = x / power;
// cout << digit<<" "<<endl;
num[n] = digit;
n++;
x %= power;
power /= 10;
}
/* 试一下数组对不对捏
for (int j = 0; j < n; j++) {
cout << num[j] << endl;
}
*/
for (int j = 0; j <n / 2; j++) {
if (num[j] != num[n - j - 1]) {
flag=0;
break;
}
}
if (flag == 0)
return false;
else
return true;
}
}
};
int main() {
Solution s;
int x;
cin >> x;
if (s.isPalindrome(x)) {
cout << "这个数是个回文数" << endl;
}
else
cout << "这个数不是回文数" << endl;
return 0;
}
问题与总结
1.感觉把存储每一位数字和判断回文两个步骤是可以优化合并在一起进行的,我做麻烦了,这个博主是合并在一起做的,可以借鉴一下
(3条消息) 判断回文数(用函数)并且输出范围a到b之间的所有回文数 c++_正风不正风的博客-CSDN博客_c++判断回文数的函数
2.白天拖拖拉拉偷懒,没想到晚上就一遍过了,虽然是个很简单的题,还是很开心