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

C語言基礎練習:輸出 10000 以內所有回文數(含邏輯修正與優化寫法)

     編輯:關於C語言

題目說明

列印 10000 以內所有回文數:正讀反讀相同的整數。如 11、121、1221、1331…

原始碼問題與修正

原始碼 printf 訊息寫「回文素數」實為錯誤,且判斷函數 isPalindrome 將參數 m 直接修改導致後續無法使用。修正重點:

  1. 輸出訊息修正為「回文數」
  2. 判斷函數使用暫存變數,不破壞原值
  3. 補上個位數(0~9)也是回文數的邏輯

修正後完整代碼

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

bool isPalindrome(int n);

int main() {
    printf("10000 以內的回文數:\n");
    for (int i = 0; i < 10000; i++) {  // 從 0 開始,包含個位數
        if (isPalindrome(i)) {
            printf("%d ", i);
        }
    }
    printf("\n");
    return 0;
}

// 數字反轉法判斷回文
bool isPalindrome(int n) {
    if (n < 10) return true;  // 0~9 皆為回文
    int original = n, reversed = 0;
    while (n > 0) {
        reversed = reversed * 10 + n % 10;
        n /= 10;
    }
    return original == reversed;
}

執行結果與統計

程式執行畫面

10000 以內回文數共 199 個:
個位數 10 個、兩位數 9 個(11~99)、三位數 90 個(101~999)、四位數 90 個(1001~9999)。

進階寫法:字串法判斷

bool isPalindromeStr(int n) {
    char s[6];
    sprintf(s, "%d", n);
    int len = strlen(s);
    for (int i = 0; i < len / 2; i++) {
        if (s[i] != s[len - 1 - i]) return false;
    }
    return true;
}

字串法直觀易懂,適合處理超大整數或不同進位制回文判斷。

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