什么是回文数?(摘自百度百科)
“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(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); printf("输出n:%s\n", n); d = strlen(h); 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) { 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++) ; for (p = str, q--; (p < q) && (*p == *q); p++, q--) ; if (p < q) printf("no"); else printf("yes"); }
|