標籤:迴文數 迴文字串 遞迴
使用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);}}
本文出自 “Materfer” 部落格,請務必保留此出處http://10741357.blog.51cto.com/10731357/1757746
判斷一個數是否為迴文數,字串是否為迴文字串