什么是回文数?(摘自百度百科)#

“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。 [1] 设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。 [1]

注意:1.偶数个的数字也有回文数124421

2.小数没有回文数

中文名 回文数

外文名 palindrome number

定    义 正读倒读都一样的整数

增加一个定义判断: 输入字符判断

例:abcdcba

方法一#

利用 正读倒读都一样 的特性,先将字符数组倒转,判断与原数组是否相等,相等则判断为回文,否则输出 No. 代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <string.h>
int main()
{
char h[20], n[20];
int mid, d;
printf("请输入:");
scanf("%s", h);
strcpy(n, h); // strcpy函数,将h复制给n
printf("输出n:%s\n", n);
d = strlen(h); // strlen函数 直接输出数组长度,或者下面方法循环计数得出
// for (d = 0; h[d] != '\0'; d++); //计数,输入的字符长度i
mid = d / 2;
//倒换字符数组
if (d % 2 == 0) //长度为偶数
{
for (int i = 0; i < mid; i++) {
char temp;
temp = h[mid + i];
h[mid + i] = h[mid - 1 - i];
h[mid - 1 - i] = temp;
}
} else //长度为奇数
{
for (int i = 0; i <= mid; i++) {
char temp;
temp = h[mid + i];
h[mid + i] = h[mid - i];
h[mid - i] = temp;
}
}
printf("输出h:%s,长度%d\n", h, d);
if (strcmp(h, n) == 0) // strcmp函数 比较两个字符串大小,相等则为0;
{
printf("%s 是回文数", n);
} else {
printf("%s 不是回文数", n);
}
return 0;
}

方法二#

利用两个指针分别指向字符数组头尾,循环判断每次是否相等.代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
void main()
{
char str[81], *p, *q;
gets(str); //输入得到 字符窜
for (q = str; *q != '\0'; q++)
; //将q指针循环指向到数组中最后一位,即指向 '\0'
// q-- ,使q指针指向数组最后一个字符,而不是结束字符 '\0'
// p=str 使p指针指向数组第一个字符
//当p<q,且指向的字符相等,执行循环.
//当p>=q,说明循环执行完成,是回文数
for (p = str, q--; (p < q) && (*p == *q); p++, q--)
;
if (p < q)
printf("no");
else
printf("yes");
}