回文的判断(C语言)---自学文档

目录

【回文的定义】

【字符串回文判断(C语言)】

【数字回文判断(C语言)】

【 写在最后】


【回文的定义】

         回文,指汉语中的回文语法,即把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情况,叫做回文,也叫回环。【摘自百度百科】

        简单来说就是正着反着念都一样,“上海自来水来自海上”,“山西运煤车煤运西山”,“AABBAA”,“123454321”这一类的东东。

【字符串回文判断(C语言)】

        【想法】设置两个变量,一个从头读字符数组,另一个从尾读数组

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
	int i, j, len;
	char a[100];
	gets(a);
	len = strlen(a);

	for (i = 0, j = len - 1; i < j; i++, j--)
		if (a[i] != a[j])
			break;

	if (i < j)
		printf("NO");
	else
		printf("YES");

	return 0;
}

 

【数字回文判断(C语言)】

        会发现数字回文的判断并不如字符回文的判断那么容易,因为%d输入数字的时候,数字是一个整体,不像字符串那样,每次只将一个字符放入字符数组中,那么如何将数字也能处理得像字符数组一样嘞?


        想象现在有两个弹夹,你给第一个弹夹的每个子弹一个数字编号,你每次从第一个弹夹里取出一个子弹,压进第二个弹夹中,直到第一个弹夹中的子弹全部压到第二个弹夹中,你再去比对数字编号,看是否相等


        上面这个能理解的话,就可以尝试用代码来实现        

        【想法】用一个循环,实现以下操作:

        通过取余操作(%)实现每次取出数字的最后一位并保存,

        将取出的数字往前数字进一位

        通过除以操作(/)消除原先数字的最后一位

                C语言中除以一个数得到的数会自动舍去小数点后的数,如 5/2 = 2;

# include <stdio.h>

int main() {
	int num, m = 0, s = 0, n;

	printf("请输入一个正整数:\n");
	scanf("%d", &num);
	s = num;

	while (s != 0) {
		n = s % 10; //n是s的末位数
		m = m * 10 + n; //把s的末位数放到m的末位
		s = s / 10; //去掉末位数的新s
	}

	if (num == m)
		printf("%d 是回文数\n", num);
	else
		printf("%d 不是回文数\n", num);

	return 0;
}

        【思考】由于字符是以ASCII码形式存储在计算机中的,数字也有对应的ASCII码,所以很容易想到,其实可以直接用字符数组来存储你输入的一串数字,从而用“字符回文判断方法”判断数字是否为回文形式

【 写在最后】

        计算机新手,有什么想法或做法不对的地方希望大佬不吝赐教,感谢!

Guess you like

Origin blog.csdn.net/qq_56117689/article/details/121529417