标题
回文数:正读倒读都一样的整数
思路:判断十进制正整数在所需要的进制下第一位和最后一位,第二位和倒数第二位是否相等……直到前后相遇,若其中有一位不相等,则该数在此进制下不是回文数
例如:
1)十进制12321在十进制下判断,第一位1等于最后一位1,第二位2等于倒数第二位2,然后判断到同一位不再继续判断,该数是回文数
2)十进制1234311在十进制下判断,第一位1等于最后一位1,第二位2不等于倒数第二位1,不再判断,该数在此进制下不是回文数
具体实现如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int palindromic_num(int n, int num) {
int count = 0;
int ret;
ret = num;
while (ret) {
++count;
ret /= n;
}
for (int i = 0, j = count; i < j; ++i, --j) {
if ((num / (int)pow(n, i)) % n != (num / (int)pow(n, j - 1) )% n) {
return 0;
}
}
return 1;
}
void main() {
int num;
int n;
printf("请输入需要判断的10进制正整数\n");
scanf("%d", &num);
printf("请输入您需判断该数转化为哪种进制判断,请输入(只允许输入2,8,10,16)\n");
while (1) {
scanf("%d", &n);
if (n == 2 || n == 8 || n == 10 || n == 16) {
break;
}
printf("您的输入非法,请重新输入\n");
}
if (n == 2) {
printf("%d在%d进制下是", num, n);
while (num) {
printf("%d", num % 2);
num /= 2;
}
if (palindromic_num(n, num) == 1) {
printf("\n是回文数\n");
}
else {
printf("\n不是回文数\n");
}
}
if (n == 8) {
printf("%d在%d进制下是%o\n",num, n, num);
if (palindromic_num(n, num) == 1) {
printf("是回文数\n");
}
else {
printf("不是回文数\n");
}
}
if (n == 10) {
printf("%d在%d进制\n", num, n);
if (palindromic_num(n, num) == 1) {
printf("是回文数\n");
}
else {
printf("不是回文数\n");
}
}
if (n == 16) {
printf("%d在%d进制下是%x\n", num, n, num);
if (palindromic_num(n, num) == 1) {
printf("是回文数\n");
}
else {
printf("不是回文数\n");
}
}
system("pause");
}