使用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 = ch1 + 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) { pld(++begin, --end); } }
时间: 2024-10-03 13:45:08