一、名词解释:
如果一个数正着反着都是一样,就称为这个数是回文数。例如:6, 66, 606, 6666
同理如果一个字符串正着反着都是一样就称为这个字符串是回文字符串,例如“aba”,"aabb"
二、解题思路
回文数解题思路一:可以将整数逐位存到数组中,在依次把第一个和最后一个比较,直到中间位为止
这个思路同回文字符串的思路相同。
回文数解题思路二:将该整数逆置后的整数和逆置前比较。
三、算法代码演示
1、回文数解法
解法1:
#include int main()
{
int num, s, y = 0;
printf("Please input numbers: ");
scanf_s("%d", &num);
s = num;
while (s > 0)
{
y = y * 10 + s % 10;
s = s / 10;
}
if (y == num)
{
printf("%d是一个回文数!\n", num);
}
else
{
printf("%d不是一个回文数!\n", num);
}
}
结果截图:
解法2:
#include int main()
{
int a[50];
int num, s, y = 0;
printf("Please input numbers: ");
scanf_s("%d", &num);
s = num;
int i = 0;
while (num)
{
a[i] = num % 10;
num /= 10;
i++;
}
int j = 0;
int flag = 0;
for (j = 0; j < i / 2; j++)
{
if (a[j] != a[i - 1 - j])
{
flag = 1;
printf("%d不是一个回文数!\n", s);
break;
}
}
if (flag == 0)
{
printf("%d是一个回文数!\n", s);
}
}
结果截图:
2、回文字符串解法
#include #include int main()
{
int j, i, n;
char a[999], b[999];
printf("Please input string: ");
scanf("%s", &a); //输入字符串
n = strlen(a); //用strlen函数读取字符串长度(长度到\0停止)
for (i = 0, j = n - 1; i < n; i++, j--) //循环将字符串a逆序赋值给b
b[j] = a[i];
for (i = 0; i < n; i++)
{
if (b[i] != a[i])
break; //判断是否回文
}
if (i == n) printf("%s是一个回文字符串!\n",a);
else printf("%s不是一个回文字符串!\n", a);
return 0;
}