基本題01 以C語言寫利用指定迴圈控制指令,由外部輸入一個欲判斷的數字,若此數字為迴文(Palindrome,左右讀起均同,例如 12321),則印出此數字及“is a palindrome.”,若不是則印出此數字及“is not a palindrome.” * 使用 for 迴圈,方法1(著重觀念) ``` #include <stdio.h> #include <math.h> int main() { // 宣告要使用的變數 int num = 0; // 儲存欲輸入的數字 int numCount = 0; // 儲存欲輸入的數字有幾位數 int temp1; int temp2; // 暫存輸入數字計算用 int modDigit = 0; // 計算出反向數字用的餘數計算 int reversed = 0; // 計算出反向數字 // #1 // 處理輸入部分,請使用者輸入一個欲判斷的數字 printf("請輸入一個整數:"); scanf("%d", &num); // #2 // 計算輸入數字的位數 temp1 = num; printf("temp = %d \n",temp1); while (temp1 > 0) { numCount++; temp1 = temp1 / 10; // 把temp1除以10,去掉最後一位數字 printf("temp1 = %d \n",temp1); // 當temp1 = 0,就計算完有幾位數了 } printf("欲判斷的數字總共有 %d 位數 \n",numCount); // #3 // 用 for 迴圈計算出反轉數字 (欲判斷的數字總共有幾位數,就跑幾次迴圈 temp2 = num; printf("計算反向數字 = %d \n",reversed); for (int i = 0; i < numCount; i++) { modDigit = temp2 % 10; // 用餘數取出最後一位數字 reversed = reversed * 10 + modDigit; // 反向數字為每次暫存反向數字x10 + 餘數 temp2 = temp2 / 10; // 每次迴圈去掉餘數 printf("計算反向數字 = %d \n",reversed); } // #4 // 比較使用者輸入數字 num 和 反向數字 reversed 是否相同,根據判斷結果印出訊息 if (num == reversed) { printf("%d is a palindrome.\n", num); } else { printf("%d is not a palindrome.\n", num); } return 0; } ``` * 使用 for 迴圈,方法2 ``` #include <stdio.h> int main() { int num, reversed = 0, digit; int original; // 請使用者輸入一個整數 printf("請輸入一個整數:"); scanf("%d", &num); original = num; // 保存原始數字,因為接下來會改變 num // 反轉數字的過程: // 當 num 還有數字的時候,就一直做下面的事情 for (; num > 0; num = num / 10) { digit = num % 10; // 取出 num 最後一位的數字 reversed = reversed * 10 + digit; // 把 digit 加到 reversed 的後面 } // 判斷原始數字和反轉後的數字是否相同 if (original == reversed) { printf("%d is a palindrome.\n", original); } else { printf("%d is not a palindrome.\n", original); } return 0; } ``` * 使用 while 迴圈 ``` #include <stdio.h> int main() { int num = 0; // 儲存使用者輸入的數字 int reversed = 0; // 儲存反轉後的數字 int temp; // 用來暫存計算用的數字 int modDigit = 0; // 用來存放每次取出的最後一位數字 // 請使用者輸入一個整數 printf("請輸入一個整數:"); scanf("%d", &num); temp = num; // 把原始數字存到 temp,方便後面計算 // 用 while 迴圈反轉數字 while (temp > 0) { modDigit = temp % 10; // 取出最後一位數字 reversed = reversed * 10 + modDigit; // 加到反轉數字的後面 temp = temp / 10; // 去掉最後一位數字 } // 比較原始數字和反轉後的數字 if (num == reversed) { printf("%d is a palindrome.\n", num); } else { printf("%d is not a palindrome.\n", num); } return 0; } ``` * 使用 do while 迴圈 ``` #include <stdio.h> int main() { int num = 0; // 儲存使用者輸入的數字 int reversed = 0; // 儲存反轉後的數字 int temp; // 用來暫存計算用的數字 int modDigit = 0; // 用來存放每次取出的最後一位數字 // 請使用者輸入一個整數 printf("請輸入一個整數:"); scanf("%d", &num); temp = num; // 把原始數字存到 temp,方便後面計算 // 用 do...while 迴圈反轉數字 do { modDigit = temp % 10; // 取出最後一位數字 reversed = reversed * 10 + modDigit; // 加到反轉數字的後面 temp = temp / 10; // 去掉最後一位數字 } while (temp > 0); // 只要 temp 還有數字就繼續 // 比較原始數字和反轉後的數字 if (num == reversed) { printf("%d is a palindrome.\n", num); } else { printf("%d is not a palindrome.\n", num); } return 0; } ```