一、判断一个字符串是否为回文字符串
#include #include #include //包含strlen
#define YES 1
#define NO 0
#define uchar unsigned char
#define uint unsigned int
#define ushort unsigned short
#define ulong unsigned long
#define u8 uchar
#define u16 ushort
#define u32 ulong
u8 IsPalindromeString(u8 *pStr);
int main(void)
{
u8 array[] = "abcdefgfedcba";
u8 value = 0;
value = IsPalindromeString(array);
if (value)
{
printf("是回文字符串!\n");
}
else
{
printf("不是回文字符串!\n");
}
return 0;
}
//思路:
//(1)用两个指针分别指向字符串的头和尾
//(2)比较两指针指向的字符是否相同
//(3)若相同则头指针向后移动,尾指针向前移动
//(4)若不同则返回NO,说明不是回文字符串
//(5)重复2.3.4
//(6)若头尾指针指向位置相邻或相同则返回YES,说明是回文字符串
u8 IsPalindromeString(u8 *pStr)
{
u8 num = strlen((const char *)pStr);
u8 *pHead = pStr;//指向字符串的头
u8 *pTail = pStr+num-1;
for (; pHead<=pTail; pHead++, pTail--)
{
if (*pHead != *pTail)
{
return NO;
}
else if (pHead == pTail || pHead+1 == pTail)
{
return YES;
}
}
}
二、判断一个数是否为回文数
#include #include #include //包含strlen
#define YES 1
#define NO 0
#define uchar unsigned char
#define uint unsigned int
#define ushort unsigned short
#define ulong unsigned long
#define u8 uchar
#define u16 ushort
#define u32 ulong
u8 IsPalindromeNumber(u32 num);
int main(void)
{
u32 num = 1221;
u8 value = 0;
value = IsPalindromeNumber(num);
if (value)
{
printf("是回文数!\n");
}
else
{
printf("不是回文数!\n");
}
return 0;
}
/*
分析:因为回文数从高位向低位看的数值和从低位向高位看的数值是相等的。
所以:可以将数值从低位到高位进行拆分,然后再重新组合,通过判断新组合
的数值是否和原数值相等即可判断是否为回文数!
*/
u8 IsPalindromeNumber(u32 num)
{
u32 temp = num;
u32 sum = 0;
while (num)
{
sum = sum*10 + num%10;//将num从低位到高位依次取出然后再重新组合成一个整数
num /= 10;//将num去掉个位数
}
if(sum == temp)
{
return YES;
}
else
{
return NO;
}
}