使用C语言编写程序
判断一个数是否为回文数。(ps:回文数也是一个数字,数字的特点是正反序是同一个数字,如12321,3443就是回文数)。
要判断该数字是否为回文数,可以通过模除得到该数的反序数字,进行比较是否相等来判断。
具体实现如下:
void Practice()
{
int num, value, flag, var;
value = 0;
flag = 1;
scanf("%d", &num);
var = num;
while(num)
{//value存储num的反序数字
value = value * flag + num % 10;
flag *= 10;
num /= 10;
}
printf("value=%d\n", value);
if (value == var)
{
printf("%d是回文数\n", var);
}
else
{
printf("%d不是回文数\n",var);
}
}
判断一个字符串是否为回文字符串。(ps:回文字符串也是一个回文字符串,但原字符串和字符串逆序后一样,如abcba,cddc就是回文字符串)。
要判断字符串逆置后是否与原字符串一样,可以判断它是否对称。利用两个指针从该字符串两头向中间依次进行比较,判断是否相等,而结束点是begin==end(偶数个字符时)或++end==begin(奇数个字符时)。
具体实现如下:
void Practice()
{
//char* ch = "abcba";
//char* ch = "abccba";
char* ch = "abcrba";
char* begin = ch;
char* end = ch;
while (*end != '\0')
{
end++;
}
end--;//使end指向字符串中的最后一个字符
//while (!(begin == end || ++end == begin))//注意此处用++end
//{
// end--;//由于while中++end,故使end重新指向
// if (*begin == *end)
// {
// begin++;
// end--;
// }
// else
// {
// printf("%s不是回文字符串\n", ch);
// return;
// }
//}
while (begin < end)
{
if (*begin != *end)
{
printf("%s不是回文字符串\n", ch);
return;
}
begin++;
end--;
}
printf("%s是回文字符串\n", ch);
}
也可以通过递归实现:
void Practice20()
{
char* ch1 = "abcba";
char* ch2 = "abccba";
char* ch3 = "abcrba";
char* end1 = ch1 + strlen(ch1) - 1;
char* end2 = ch2 + strlen(ch2) - 1;
char* end3 = ch3 + strlen(ch3) - 1;
printf("%d\n", pld(ch1, end1));
printf("%d\n", pld(ch2, end2));
printf("%d\n", pld(ch3, end3));
}
int pld(char *begin, char *end)
{
if (begin == NULL || end == NULL)
return 0;
if (begin == end || begin > end)
{
return 1;
}
if (*begin != *end)
{
return 0;
}
else
{
pld(++begin, --end);
}
}
转载于:https://blog.51cto.com/luoyafei/1757746