设n是一任意自然数。若将n的各位数字反向排列所得自然数n'与n相等,则称n为回文数。如:12321
PS:
1.偶数位的数字也有回文数
2.小数没有回文数
具体实现如下:
#include <iostream>
#include <iomanip>
using namespace std;
bool IsPalindromicNumber(int num);
int main(){
int a, b, flag = 0;
cin >> a; //上限
cin >> b; //下限
for (int i = a + 1; i < b; i++){
//这个循环主要用于输出我们输入的数a到数b这个范围的回文数
if (IsPalindromicNumber(i)){
cout << setw(8) << i; //使用setw输出 更好看点
flag++;
if (flag % 5 == 0){ //限定每五个换行
cout << endl;
}
}
}
system("pause");
return 0;
}
bool IsPalindromicNumber(int num){
//判断一个数是否为回文数
int arr1[100] = { 0 }, weishu = 0, biaozhi1, biaozhi2;
weishu = 0; //位数,可用于从数组中取元素来比较
for (int i = 1, num1 = num, shuzu = 0; num / i; i = (i * 10))
{
//这个循环用于获得num的每一位,当num/i==0时结束,i每过一次循环都会大10倍
//当num为一位时 循环进行一次 当num为两位 两次 三位 三次
arr1[shuzu] = num1 % 10;
//依次获得从个位开始的每一位
num1 = num1 / 10;
weishu++;
//循环进行一次,表明位数需要加一
shuzu++;
//并且使它存到数组的下一位
}
biaozhi1 = 0;
biaozhi2 = 0;
for (int i = 0, j = weishu - 1; j>i;){
biaozhi1++;
//循环进行一次,标志1加一
if (arr1[i] == arr1[j]){
//比较数组arr1中的对应位是否相等
biaozhi2++;
//相等则标志2加一
}
else{
break;
}
i++;
j--;
}
if (biaozhi1 == biaozhi2){
//下结论num是回文数
return true;
}
return false;
}