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

C語言基礎練習:三位數拆解百十個位數字完整解析

     編輯:關於C語言

C語言基礎練習:三位數拆解百十個位數字完整解析

將一個三位自然數拆解為百位、十位、個位數字,是掌握整數除法(/)與取模運算(%)的經典入門題。本文從核心邏輯、代碼實現、邊界情況到擴展思維,層層遞進講解這一基礎算法。

核心數學原理

設三位數為 n(100 ≤ n ≤ 999):

  • 百位:n / 100(整數除法自動截斷小數部分)
  • 十位:(n / 10) % 10 或 n % 100 / 10
  • 個位:n % 10

關鍵洞察: / 向右移動數位,% 保留低位數字。組合使用即可精準提取任意位。

標準代碼實現

#include <stdio.h>

int main() {
    int num;
    scanf("%d", &num);
    
    int hundred = num / 100;
    int ten = (num / 10) % 10;   // 等價於 num % 100 / 10
    int unit = num % 10;
    
    printf("%d %d %d\n", hundred, ten, unit);
    return 0;
}

輸入輸出示例

輸入百位十位個位輸出
2562562 5 6
1001001 0 0
9999999 9 9

常見錯誤與避坑指南

  1. 輸入非三位數:題目通常保證輸入合法,但工程代碼應加驗證 if (num < 100 || num > 999)
  2. 負數處理:C99 標準規定 -123 % 10 == -3,若需支持負數需取絕對值
  3. 格式符錯誤:scanf("%d", num) 缺少 & 導致崩潰
  4. 輸出格式:要求「空格隔開」,勿用 %d%d%d 或多餘換行

進階擴展:任意位數拆解通用算法

利用數組或遞歸實現通用位數提取(由低位到高位):

#include <stdio.h>

void printDigits(int n) {
    if (n == 0) return;
    printDigits(n / 10);          // 遞歸處理高位
    printf("%d ", n % 10);        // 輸出當前低位
}

int main() {
    int num;
    scanf("%d", &num);
    if (num == 0) printf("0");
    else printDigits(num);
    printf("\n");
    return 0;
}

遞歸優勢: 自動處理最高位前導零問題,邏輯清晰符合數學直覺。

相關經典題目延伸

  • 回文數判斷:拆解後比對首尾數字
  • 水仙花數:三位數各位立方和等於自身(見《循環-11 水仙花數》)
  • 數字根計算:反覆拆解求和直至個位
  • 進制轉換:同理應用 / 與 % 實現十進制轉二進制/八進制/十六進制

工程化建議

在實際項目中,建議封裝為通用工具函數:

// 返回數字各位組成的數組(低位在前),同時返回位數
int extractDigits(int n, int digits[], int maxSize) {
    int count = 0;
    if (n == 0) {
        if (maxSize > 0) digits[count++] = 0;
        return count;
    }
    while (n != 0 && count < maxSize) {
        digits[count++] = n % 10;
        n /= 10;
    }
    return count;
}

掌握位數拆解不僅是通過 OJ 題目,更是建立「位運算思維」的基石。從此題出發,可延伸至位掩碼、哈希算法、加密解密等計算機科學核心領域。建議動手實現遞歸與迭代兩版本,體會時空複雜度的權衡之道。

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