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

C 語言判斷五位數回文數:數學分解法與邊界檢查

     編輯:關於C

問題定義

輸入一個五位整數(10000~99999),判斷是否為回文數。回文數定義:萬位=個位,千位=十位。例如 12321、45554 均為回文數。

核心算法:位運算分解

利用整除與取模運算提取各位數字:

  • 萬位:num / 10000
  • 千位:num / 1000 % 10
  • 十位:num % 100 / 10
  • 個位:num % 10

判斷條件:(萬位 == 個位) && (千位 == 十位)

完整代碼(含輸入驗證)

#include <stdio.h>

int main() {
    int num = 0;
    printf("please input a int num: ");

    // 輸入驗證迴圈:確保輸入為五位數
    do {
        if (num != 0) {
            if (num < 10000)
                printf("so, input a bigger one: ");
            else
                printf("so, input a smaller one: ");
        }
        scanf("%d", &num);
    } while (num > 99999 || num < 10000);

    // 回文判斷
    if ((num / 10000 == num % 10) && (num / 1000 % 10 == num % 100 / 10))
        printf("Yes, it is!\n");
    else
        printf("No, it isn't!\n");

    return 0;
}

關鍵點解析

1. 輸入驗證的 do-while 模式

至少執行一次 scanf,並在輸入不合法時給出具體提示(過大/過小),用戶體驗優於單純的 while。

2. 數學分解避免字符串轉換開銷

對比字符串反轉法(sprintf + strcmp),純整數運算:
• 無內存分配
• 無庫函數調用開銷
• 適合嵌入式/高性能場景

3. 邊界條件覆蓋

輸入結果說明
12321Yes標準回文
10001Yes含零回文
99999Yes最大五位回文
12345No非回文
9999重新輸入四位數被攔截
100000重新輸入六位數被攔截

擴展:通用 N 位回文判斷

bool is_palindrome(int num) {
    if (num < 0) return false;
    int original = num, reversed = 0;
    while (num > 0) {
        reversed = reversed * 10 + num % 10;
        num /= 10;
    }
    return original == reversed;
}

此法通用於任意位數,但會改變原數值(需備份),且存在整數溢出風險(輸入接近 INT_MAX 時)。五位數專用的數學分解法更安全高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved