C++求是否是回文数,我想知道设计思路
答案:2 悬赏:0 手机版
解决时间 2021-02-19 04:07
- 提问者网友:练爱
- 2021-02-18 13:26
#include
using namespace std;
bool IsPalindromeNum(int num) {
char s[10], i = 0, j;
while (num > 0) {
s[i] = num % 10 + '0';
num = num / 10;
i++;
}
s[i] = '\0';
i--;
for (j = 0; j < (i + 1) / 2; j++) if (s[j] != s[i - j]) return false;
return true;
}
void main() {
int number;
cout << "输入一个整数:";
cin >> number;
if (IsPalindromeNum(number)) cout << number << " : 是回文数" << endl;
else cout << number << " : 不是回文数" << endl;
}
复制的,不懂这个程序的设计理念,大神大概讲下
最佳答案
- 五星知识达人网友:夜余生
- 2021-02-18 13:52
把一个整数的各个数位分离出来转换成字符数组:比如1234转换成{'1', '2' ,'3', '4'}
然后对这个数组进行比较,第1个元素和最后一个元素比较,第2个和倒数第2个比较,一旦不相等,就return false
这个思路其实有些复杂了,给你提供一种更简单的方法:
仍然是分离1个整数的各个数位,但是把这些数位逆序加起来,即将一个数转换成它的逆序,如果和原来的数相等,那么就是回文。
比如1234,逆序是4321,和原来不相等,则不是回文
全部回答
- 1楼网友:妄饮晩冬酒
- 2021-02-18 14:53
#include
using namespace std;
bool IsPalindromeNum(int num) {
char s[10], i = 0, j;
while (num > 0) {
s[i] = num % 10 + '0'; // 取个位+'0'转换成0-9的数字
num = num / 10; // 向前移一位(如个位变十位,十位变百位)
i++;
}
s[i] = '\0';
i--;
// 由头和尾部收缩两两对比。 另外这个程序不严谨。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯