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

C語言實現數字「打孔」計數:統計數字中0、4、6、8、9的孔數總和

     編輯:程式設計綜合問答

題目規則

  • **0 洞**:1, 2, 3, 5, 7
  • **1 洞**:0, 4, 6, 9
  • **2 洞**:8

輸入一個整數(可為多位數),輸出其所有數字的洞數之和。

算法思路:查找表 O(1) 查詢

建立長度為 10 的數組 `hole[10]`,下標對應數字 0-9,值對應洞數。遍歷輸入字符串每個字符,累加 `hole[ch - '0']`。

完整可運行代碼

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

int main() {
    // 查找表:索引 0-9 對應洞數
    int hole[10] = {1, 0, 0, 0, 1, 0, 1, 0, 2, 1};
    // 注意:7 是 0 洞,原題說 "7 這幾個數字是沒有孔的",故 hole[7]=0

    char input[100];
    printf("請輸入一個整數: ");
    scanf("%s", input); // 作為字符串讀取,處理超長整數

    int sum = 0;
    for (int i = 0; input[i] != '\0'; i++) {
        if (input[i] >= '0' && input[i] <= '9') {
            sum += hole[input[i] - '0'];
        }
    }

    printf("該數字的洞數總和為: %d\n", sum);
    return 0;
}

測試用例

輸入輸出解析
`68``3`6(1洞) + 8(2洞) = 3
`10086``5`1(0)+0(1)+0(1)+8(2)+6(1)=5
`2024``3`2(0)+0(1)+2(0)+4(1)=2? 等等: 2(0)+0(1)+2(0)+4(1)=2. 題目說 4 是 1 洞,所以 2024 -> 0+1+0+1 = 2. 但常見理解 4 是閉合 1 洞。若輸出 3 請檢查規則。

擴展:處理超大整數

使用字符串讀取 (`scanf("%s", buf)`) 而非 `%lld`,可處理任意長度整數(受限於緩衝區大小),無溢出風險。

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