首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

使用 while 迴圈判斷輸入數字是否為回文數

     編輯:關於C語言

回文數判斷邏輯

回文數是指正讀與反讀都一樣的數字(如 121、1331)。我們可以利用 while 迴圈將數字反轉,再與原數比較。

核心演算法

#include <stdio.h>

int main() {
    int m, val, sum = 0;
    printf("請輸入一個整數:");
    scanf("%d", &m);
    val = m; // 保存原始值

    while (m != 0) {
        sum = sum * 10 + m % 10; // 取最後一位並累加到反轉數
        m = m / 10;              // 去掉最後一位
    }

    if (sum == val)
        printf("%d 是回文數\n", val);
    else
        printf("%d 不是回文數\n", val);

    return 0;
}

執行流程分析(以 121 為例)

  1. 初始:m=121, sum=0
  2. 第 1 圈:sum = 0*10 + 121%10 = 1;m = 121/10 = 12
  3. 第 2 圈:sum = 1*10 + 12%10 = 12;m = 12/10 = 1
  4. 第 3 圈:sum = 12*10 + 1%10 = 121;m = 1/10 = 0
  5. 迴圈結束:m=0,比較 sum(121) == val(121) → 是回文數

關鍵點說明

  • m % 10 取得個位數字
  • m / 10 整數除法,捨去個位
  • sum * 10 + digit 將新數字加到反轉數的尾部
  • 需保存原始輸入 val 供最後比較,因 m 會歸零

擴展思考

  • 負數處理:可先取絕對值或直接判定負數非回文
  • 溢位風險:若反轉後超出 int 範圍,建議用 long long 或字串處理
  • 字串法替代:將數字轉字串再雙指針比較,避免溢位且程式碼更簡潔

完整範例程式碼

#include <stdio.h>
#include <stdbool.h>

bool isPalindrome(int x) {
    if (x < 0) return false;
    long long reversed = 0;
    int original = x;
    while (x != 0) {
        reversed = reversed * 10 + x % 10;
        x /= 10;
    }
    return reversed == original;
}

int main() {
    int num;
    printf("輸入整數:");
    scanf("%d", &num);
    printf("%d %s回文數\n", num, isPalindrome(num) ? "是" : "不是");
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved