C 练习实例30 - 回文数
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:学会分解出每一位数。
程序源代码:
实例
// Created by www.runoob.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 这不是回文数
C 语言经典100例
叮咚
126***9648@qq.com
其他参考解法:
#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"); } }叮咚
126***9648@qq.com
火云
103***8583@qq.com
利用字符串实现的方法:
#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; }火云
103***8583@qq.com
Jinlaips
jin***ps@qq.com
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; }Jinlaips
jin***ps@qq.com
程 征
228***950@qq.com
判断是否是回文数,先将此数字按逆序重排,再与原先数值比较:
#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); }程 征
228***950@qq.com
HIT_CCC
117***2963@qq.com
参考方法:
#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; }HIT_CCC
117***2963@qq.com
ronnyz
221***8677@qq.com
参考方法:
#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; }ronnyz
221***8677@qq.com
阿立
139***6940@qq.com
采用逆序输出的思想,输入一串字符,可以判断是否为回文。
#include<stdio.h> #include<string.h> /* 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 逆序输出,判断是否与原来相同 */ int i = 0, j = 0; char b[100], c[100]; void p() { char a; if ((a=getchar()) != '\n') { c[j] = a; j++; p(); b[i] = a; i++; } } int main() { p(); if (strcmp(b,c) == 0) { printf("是回文!"); } else { printf("不是回文!"); } while (1); return 0; }阿立
139***6940@qq.com
Robin_Han
254***143@qq.com
参考:
/*利用itoa 整形转字符串库函数实现任意位数回文数判断*/ /*子函数里面首先判断输入的整数的位数 计入整形值count*/ /*有了count便知道输入的整数的实际位数,然后利用字符串数组的特性,遍历其首位和尾位进行比较*/ #include <stdio.h> #include <stdlib.h> int is_palin_num(int num) //计算 这是几位数 { int flag=1; //定义旗帜,默认是回文数 char str[100]; char *pa=str; pa=itoa(num,str,10); int count=0; while(pa[count]!='\0') { count++; } for(int i=0,j=count-1;i!=j;i++,j--) //首位和末位 遍历比较 当i==j时终止循环 { if(pa[i]!=pa[j]) { flag=0; break; } } return flag; } int main() { int num; printf("输入一个整数:"); scanf("%d",&num); if(is_palin_num(num) ) { printf("%d是回文数!",num); } else { printf("%d不是回文数!",num); } return 0; }Robin_Han
254***143@qq.com