使用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);	}}