首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C語言基礎練習:輸入正整數輸出位數、各位數字、逆序輸出

     編輯:程式設計疑難解答

題目要求

輸入 ≤ 5 位正整數,完成:
1. 判斷位數。
2. 正序輸出每位數字。
3. 逆序輸出各位數字。

原代碼問題

  • 用層層 if-else 硬編碼 1~5 位,冗長且易錯。
  • 變數命名混亂(s,i,j,k,z,y),邏輯難追蹤。
  • 未處理輸入 0 或負數情況。

通用解法:模 10 取位 + 字串/遞歸

方法一:字串處理(最簡潔)

#include <stdio.h>
#include <string.h>

int main() {
    char s[12];
    scanf("%11s", s);           // 讀字串,自動處理任意長度
    int len = strlen(s);
    printf("位數: %d\n", len);
    printf("正序: ");
    for (int i = 0; i < len; i++) printf("%c ", s[i]);
    printf("\n逆序: ");
    for (int i = len - 1; i >= 0; i--) printf("%c ", s[i]);
    return 0;
}

方法二:純算術(不轉字串)

#include <stdio.h>

void printDigits(int n) {
    if (n == 0) return;
    printDigits(n / 10);
    printf("%d ", n % 10); // 遞歸回溯實現正序
}

int main() {
    int x;
    scanf("%d", &x);
    if (x <= 0) return 0;

    int len = 0, tmp = x;
    while (tmp) { len++; tmp /= 10; }
    printf("位數: %d\n", len);

    printf("正序: "); printDigits(x); printf("\n");
    printf("逆序: ");
    tmp = x;
    while (tmp) { printf("%d ", tmp % 10); tmp /= 10; }
    return 0;
}

調試建議

  1. 在 IDE 設置斷點,觀察 tmp、len 變化。
  2. 輸入 123、1002、0 覆蓋邊界。
  3. 對比字串法與算術法優劣:字串法碼少、無位數限制;算術法適合嵌入式無庫環境。

拒絕硬編碼 if-else 堆疊,**字串或遞歸** 才是處理「位數不定」的正規軍姿勢!

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