(C语言)回文数的判断

问题描述:

判断一个数是否为回文数;

121;

12321;

1234321;

程序分析:

1.
回文数(palindromic number):是指一个数的最高位和最低位上的数相等,第二高位与次低位上的数相等,也就是关于中间“对称”。如上面的三个数情况是一个回文数。

2.将这个数扩展成一个数组,将这个数的各个位上的数取出来并且一一赋给这个数组。

3.判断这个数组中的元素之间的关系是否符合回文数的特征。并且将结果输出。这个程序写了一个函数来实现这一功能。

代码如下:

#include<stdio.h>
#define	LENTH 100
/*
	将要判断的数值的各个位存放在数组中,为判断回文数做准备
注意:
	1234----->>存放在数组中变成---->>4321
	若是回文数,数值不变12321----12321
 */
int Put_in_array(int array[],int num)
{
	int i = 0;
	while(num)
	{
		array[i] = num % 10;//将当前最低位存放于数组中
		num /= 10;          //为取出下一位最准备(丢弃已存放的数值位)
		i++;
	}
	return i; //返回数组数值的个数(即数组中元素的个数)
}
int IS_palindromic_num(int array[],int n)
{
	int left = 0;//数组中最左侧数值的下标
	int right = n - 1;//数组中最右侧数值的下标

	while(left <= right)
	{
		if(array[left] == array[right])
		{
			left++;      // 当前位左右对称相等,指向下一位,为判断下一位做准备
			right--;
		}
		else
			return 0 ;//左右不对称相等,不是回文数
	}
	return 1;//没有返回1即说明是回文数
}
int main()
{
	int num;           //要判断的数值
	int array[LENTH];  //存放数值的各个位
	int n; //数组中元素的个数
	int i = 1;

	while(i)
	{
		printf("please input the num you want to judge:\n");
		scanf("%d",&num);

		n = Put_in_array(array,num);
		if(IS_palindromic_num(array,n) == 1)
			printf("%d is a palindromic num\n",num);
		else
			printf("%d it's not a palindromic num\n",num);
		printf("if you want to continue:    1    if you want to break:   0\n ");
		scanf("%d",&i);
	}
	return 0;
}

时间: 2024-10-21 13:33:39

(C语言)回文数的判断的相关文章

回文数的判断与生成

判断是不是回文数 12321 1221 public static void PJ() { Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:"); int num = sc.nextInt(); String s = num+""; String s1 =""; for (int i = s.length()-1; i>=0; i--) { s1+=s.cha

回文数的判断

#include<stdio.h> #include<stdlib.h> int reverse(int num) {  int old=num;  int new1=0;  while(num)  {   new1=new1*10+num%10;   num=num/10;  }  if(old==new1)  {   return 1;  }  else   return 0; } int main() {  int num=0;  scanf("%d",&

回文数的实现代码

回文数,顾名思义,就是一种数,正序逆向读取完全一致.像12321,4567654就是回文数. 用C语言实现回文数的判断呢,很简单.在这呢,我做简单的介绍. 首先,用判断语句实现.判断语句呢,就是通过循环和简单的运算符,找出该数的逆向读取的数据,于本身进行比较便得到了. 代码如下: #include<stdio.h> void main() { int num; scanf("%d",&num); int min = 0, max = num; while (max

洛谷P1207 [USACO1.2]双重回文数 Dual Palindromes

P1207 [USACO1.2]双重回文数 Dual Palindromes 291通过 462提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就不是回文数. 事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数. 编

yzoi1109&amp;&amp;viojs1042最小步数的一点看法——回文数

Description - 问题描述 有一天,雄霸传授本人风神腿法第一式:捕风捉影..............的步法(弟子一:堂主,你大喘气呀.风:你给我闭嘴.)捕风捉影的关键是换气(换不好就会大喘气...). 使用捕风捉影这一招时并不是每一步都喘气,而是在特定的步数喘气.一般来说功力越高,喘气越稀疏.喘气的步数符合特定规律:第一要是SUSHU(弟子二:哇塞!堂主,你还会鸟语,我好好崇拜你呦!可是SUSHU是什么意思呢?风:笨蛋,那是汉语拼音!)第二要是一个回文数,回文数就是正反念一样的数,如:

lqb 基础练习 回文数

基础练习 回文数 时间限制:1.0s   内存限制:512.0MB 问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数. 输出格式 按从小到大的顺序输出满足条件的四位十进制数. 分析: 回文数的判断只用判断到数字的中间位数,即可. 取一个数的不同位数的值的方法: 1 while (temp) 2 { 3 A[j ++] = temp % 10; 4 temp /= 10; 5 } C/C++代码实现(AC): 1 #include <iostream

C语言判断回文数

1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 //1.得到这个数字 2.翻转 3.进行比较 4.如果相同 就输出 是 否则 输出不是 6 7 int resource, result, re_tmp; //resource存放用户输入的数值 result存放翻转后的数值 re_tmp 存放用户输入的数值 在翻转的时候会用到 8 result = 0; //对result的初始化 9 printf("

C语言-郝斌笔记-004判断是否为回文数

判断是否为回文数 1 # include <stdio.h> 2 3 int main(void) 4 { 5 int val; //存放待判断的数字 6 int m; 7 int sum = 0; 8 9 printf("请输入您需要判断的数字: "); 10 scanf("%d", &val); 11 12 m = val; 13 while (m) 14 { 15 sum = sum * 10 + m%10; 16 m /= 10; 17

【C语言】回文数与回文字符串的判断。

任意输入一个数,判断是否为回文数. 方法:将高低位互换之后如果仍然相等,则为回文数. #include <stdio.h> int huiwen(unsigned int value) { unsigned int n = value; unsigned int t = 0; while(n) { t = t*10 + n%10; n = n/10; } return (t == value); } int main () { int a,tmp; printf("please en