---
# System prepended metadata

title: 基本題01

---

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

```