C 练习实例30 - 回文数
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:学会分解出每一位数。
程序源代码:
实例
// Created by www.facesoho.com on 15/11/9.
// Copyright © 2015年 小鸟启蒙. All rights reserved.
//
#include <stdio.h>
int main( )
{
long ge,shi,qian,wan,x;
printf("请输入 5 位数字:");
scanf("%ld",&x);
wan=x/10000; /*分解出万位*/
qian=x%10000/1000; /*分解出千位*/
shi=x%100/10; /*分解出十位*/
ge=x%10; /*分解出个位*/
if (ge==wan&&shi==qian) { /*个位等于万位并且十位等于千位*/
printf("这是回文数\n");
} else {
printf("这不是回文数\n");
}
}
以上实例输出结果为:
请输入 5 位数字:12321 这是回文数 请输入 5 位数字:12345 这不是回文数

文人墨客
参考方法:
#include <stdio.h> #define N 20 int isHui(int x){ int i=0,j=0,a[N]; while(x){ a[i++]=x%10; j++; x/=10; } for(i=0;i<=j/2;i++){ if(a[i]!=a[j-1-i]) return 0; } return 1; } int main(){ int n; scanf("%d",&n); if(isHui(n)) printf("这是回文数\n"); else printf("这不是回文数\n"); return 0; }文人墨客
参考方法:
#include<stdio.h> #define N 20 int main(void) { int i,j; int n; int a[N]; printf("请输入数字:"); scanf("%d",&n); for(j = 0; j < 5; j++) { a[j] = n%10; n = n/10; } j = 0; i = 4; while(i < j) { if(a[i] != a[j]) { printf("这不是回文数\n"); return 0; } j++; i--; } printf("这是回文数\n"); return 0; }文人墨客
判断是否是回文数,先将此数字按逆序重排,再与原先数值比较:
#include <stdio.h> int main( ) { int x; int sum = 0; printf("请输入一个整数:\n"); scanf("%d", &x); for (int i = x; i > 0; i /= 10) sum = sum * 10 + i % 10; if(sum == x) printf("%d 是回文数\n",x); else printf("%d 不是回文数\n", x); }文人墨客
20位以内判断回文数
#include <stdio.h> int main(void) { unsigned long long input; int bit = 0; int xar[20]; printf("请输入20位以内正整数: "); scanf("%llu", &input); unsigned long long x = input; while (x > 0) { xar[bit++] = x % 10; x /= 10; } for (int i = 0; i < bit / 2; i++) { if (xar[i] != xar[bit - i - 1]) { printf("%llu : 不是一个 回文数 。\n", input); break; } if (i == bit / 2 - 1) printf("%llu : 是一个 回文数 。\n", input); } return 0; }文人墨客
利用字符串实现的方法:
#include <stdio.h> #include<string.h> int main() { char str[5]; printf("请输入五位数:"); scanf("%s",str); if(str[0]==str[4]&&str[1]==str[3]) printf("这是一个回文数。\n"); else printf("这不是回文数。\n"); return 0; }文人墨客
其他参考解法:
#include <stdio.h> int main() { int n; printf("请输入 5 位数字:"); scanf("%d",&n); int x[1000]; int i=0; while(n!=0) { x[i]=n%10; n=n/10; i++; } int z=i; int flag=1; for(i=0;i<z;i++) { if(x[i]!=x[z-1-i]){ flag= 0; printf("这不是回文数\n"); break; } } if(flag==1) { printf("这是回文数\n"); } }