输入一个数值判断是否为回文数(回文数是指一个像12321、123321这样“对称”的数)
之前在网上看过一些关于判断回文数的一些程序,有些大佬把判断回文数的方法分为了好几类,今天我写的只是一个很初级很简单的判断int类型回文数数据的程序。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int n = 0;
int count = 1;
int m = 0;
int i = 0;
int k = 0;
int flag = 0;
int a[100];
printf("请输入一个数字\n");
scanf("%d", &n);
m = n;
while (m > 9)
{
a[i] = m % 10;
m = m / 10;
i++;
}
a[i] = m;
k = i;
count = i+1;
for (i = 0; i < count/2; i++)
{
if (a[i] != a[k])
{
flag = 1;
break;
}
k--;
}
if (flag == 1)
{
printf("该数字不是回文数\n");
}
else
{
printf("该数字是回文数\n");
}
system("pause");
return 0;
}先简单的介绍一下我判断回文数的思想,我是将输入的这个int类型数据进行拆分,将他的每一位数字放到依次放到一个整型数组之中,之后将数组的第一位和最后一位进行比较之后是第二位和倒数第二位进行比较,依次比较如果发现不同的话就不需要再继续比较剩下的数据,直接跳出循环,如果直到最后还是没有跳出循环那就说明这个数字前后每个数字都是对称的,那么他也就是我们所说的回文数。
while (m > 9)
{
a[i] = m % 10;
m = m / 10;
i++;
}
a[i] = m;
将m的每一位都拆分开,首先模上10那得到的就是m这个数字的个位数,然后将它存到对应的数组a中,之后将m除以10,也就是把最后一位去掉了,因为int类型是不存储小数点之后位数的,再继续模10之后继续存储进去,但是当m只剩下一位数的时候while循环就会跳出,这时候m的第一位还没有存入到数组中,所以就需要再写一个a[i] = m语句。
然后现在的i就是你数字的位数减去1因为数组是从0开始的所以你的数字m应该有count = i+1;位
for (i = 0; i < count/2; i++)
{
if (a[i] != a[k])
{
flag = 1;
break;
}
k--;
}
之后用for循环开始对比你数组中的第一个和最后一个如果不相等那么直接跳出了,如果相等的话,那就让i++,k——了,继续对比。
if (flag == 1)
{
printf("该数字不是回文数\n");
}
else
{
printf("该数字是回文数\n");
}
最后对flag进行一下判断,如果flag等于1那就说明他跳出循环了说明有位数不相等,所以不是回文数,否则就是没有跳出循环说明这个数字就是我们所说的回文数。
本文介绍了一个简单的判断整数是否为回文数的方法。通过将输入的整数拆分成数组,比较数组首尾数字是否相同来确定是否为回文数。详细解释了代码逻辑,包括数字拆分和逐位比较的过程。

3万+

被折叠的 条评论
为什么被折叠?



