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

C語言練習:統計 1 到 100 中數字 9 出現的次數

     編輯:關於C

位元運算與數位分離:計算特定數字出現頻率

統計 1 到 100 之間所有整數中,數字 9 總共出現幾次?這是位數分離與計數器的基礎練習。

直觀解法:逐位檢查

#include <stdio.h>

int main() {
    int count = 0;
    
    for (int num = 1; num <= 100; num++) {
        int hundreds = num / 100;
        int tens = (num % 100) / 10;
        int units = num % 10;
        
        if (hundreds == 9) count++;
        if (tens == 9) count++;
        if (units == 9) count++;
    }
    
    printf("數字 9 出現次數:%d\n", count);
    return 0;
}

執行結果驗證

手動驗證:

  • 個位為 9:9, 19, 29, 39, 49, 59, 69, 79, 89, 99 → 10 次
  • 十位為 9:90, 91, 92, 93, 94, 95, 96, 97, 98, 99 → 10 次
  • 百位為 9:無(100 百位為 1)
  • 總計:20 次(注意 99 被計算兩次,符合題意)

進階解法:字串處理法

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

int countDigitInRange(int start, int end, char target) {
    int count = 0;
    char buffer[12];
    
    for (int i = start; i <= end; i++) {
        sprintf(buffer, "%d", i);
        for (char *p = buffer; *p; p++) {
            if (*p == target) count++;
        }
    }
    return count;
}

int main() {
    printf("9 出現次數:%d\n", countDigitInRange(1, 100, '9'));
    printf("5 出現次數:%d\n", countDigitInRange(1, 1000, '5'));
    return 0;
}

數學公式法(O(1) 複雜度)

對於大範圍(如 1 到 10^9),逐個檢查太慢。可用數位 DP 或數學公式:

// 計算 1 到 n 中數字 d 出現次數
int countDigit(int n, int d) {
    int count = 0;
    for (long long factor = 1; factor <= n; factor *= 10) {
        int lower = n % factor;
        int cur = (n / factor) % 10;
        int higher = n / (factor * 10);
        
        if (cur < d) count += higher * factor;
        else if (cur == d) count += higher * factor + lower + 1;
        else count += (higher + 1) * factor;
        
        // 處理 d=0 的前導零問題
        if (d == 0) count -= factor;
    }
    return count;
}

應用場景

  • 數字分析、統計學前處理
  • 競程題目(如 LeetCode 233. Number of Digit One)
  • 資料清洗與異常檢測
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved