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