什么是回文数?
回文数"是一种数字。如:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数
题目:输入一个范围内的数 打印该范围内的回文数 (将该范围内的每一个数判断一遍)
整理了三种方法:1.数组法 2.倒数法 3.字符串比较法
一、数组法
将某个数的每一位存进一个数组中根据回文数的特点 从数组的首元素和末元素比较 如果相等则比较首元素后一个元素和末元素前一个元素是否相等,以此类推。
#include<stdio.h>
void test(int k)
{
int x = k, arr[100] = { 0 }, count = 0, len = 0, i = 0;
while (x)
{
arr[count++] = x % 10;
x /= 10;
}
while (i <= count - 1 - i)//首尾对称比较
{
if (arr[i] != arr[count - 1 - i])
{
break;//有一组不相等直接退出
}
else//否则i++ 继续下一组的判断
i++;
}
if (i > count - 1 - i)
printf("%d ", k);//当上面的循环完整的走完没有退出 说明这个数是对称的 是回文数 走完循环i>count-1-i 打印该数即可
}
int main()
{
int a = 0, b = 0;
scanf("%d%d", &a, &b);
for (int i = a; i <= b; i++)
{
test(i);
}
return 0;
}
二、倒数法
方法有点巧妙 和数学有点联系 自己跟着代码理解吧
#include<stdio.h>
void test(int k)
{
int sum = 0, p = 0,x=k;
while (x)
{
p = x % 10;
sum = sum * 10 + p;
x /= 10;
}
if (sum == k)
printf("%d ", k);
}
int main()
{
int a = 0, b = 0;
scanf("%d%d", &a, &b);
for (int i = a; i <= b; i++)
{
test(i);
}
return 0;
}
三、字符串比较法
将数字转化为字符串 将字符串倒置后 与原来字符串比较 strcmp(x1,x2) 如果是回文数的话 那么strcmp的值就是0 (x1,x2相等返回0 大于返回1 小于返回-1)
数字转化为字符串函数_itoa(int a,char* s,int k) 将数字a转化为字符串存在一个字符数组中 s为该字符数组的数组名 也就是地址 ,k是以某进制转化 ,这里是十进制 所以k是10。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void test(char* s)
{
int len = strlen(s);
char brr[100] = { 0 };
for (int i = 0; i < len; i++)
{
brr[i] = s[len - 1 - i];
}
if (strcmp(s, brr) == 0)
printf("%s ", s);
}
int main()
{
int a = 0, b = 0;
char arr[100] = { 0 };
scanf("%d%d", &a, &b);
for (int i = a; i <= b; i++)
{
_itoa(i, arr, 10);
test(arr);
}
return 0;
}