基本題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;
}
```