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

C語言遞歸實現數字轉英文單詞:支票打印核心算法

     編輯:關於C語言

C語言遞歸實現數字轉英文單詞:支票打印核心算法

《C和指針》習題:編寫 void written_amount(unsigned int amount, char *buffer),將無符號整數轉為英文大寫單詞(如 16312 → "SIXTEEN THOUSAND THREE HUNDRED TWELVE")。

遞歸分治策略

  • 按**千分位**(三位一組)遞歸處理高位。
  • 每組三位數轉換:百位 → 十位/個位(特殊處理 10~19)。
  • 遞歸返回後追加千分位單位(THOUSAND, MILLION, BILLION)。

完整代碼

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

void written_amount(unsigned int amount, char *buffer);

int main() {
    unsigned int num; scanf("%u", &num);
    char b[100] = {0};
    written_amount(num, b);
    puts(b);
    return 0;
}

void written_amount(unsigned int amount, char *buffer) {
    static int count = 0;  // 千分位計數
    char *w1_9[] = {"ZERO","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE"};
    char *w10_19[] = {"TEN","ELEVEN","TWELVE","THIRTEEN","FOURTEEN","FIFTEEN","SIXTEEN","SEVENTEEN","EIGHTEEN","NINETEEN"};
    char *wty[] = {"","","TWENTY","THIRTY","FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY"};
    char *wdiv[] = {"HUNDRED","THOUSAND","MILLION","BILLION"};

    unsigned int high = amount / 1000;
    if (high) { count++; written_amount(high, buffer); }  // 遞歸處理高位

    int val = amount % 1000;  // 當前三位
    if (val >= 100) {
        strcat(buffer, " "); strcat(buffer, w1_9[val/100]);
        strcat(buffer, " "); strcat(buffer, wdiv[0]);  // HUNDRED
        val %= 100;
    }
    if (val >= 20) {
        strcat(buffer, " "); strcat(buffer, wty[val/10]);
        val %= 10;
    }
    if (val >= 10) {
        strcat(buffer, " "); strcat(buffer, w10_19[val%10]);
    } else if (val > 0) {
        strcat(buffer, " "); strcat(buffer, w1_9[val]);
    }

    if (count > 0) {
        strcat(buffer, " "); strcat(buffer, wdiv[count--]);
        strcat(buffer, " ");
    }
}

測試用例

輸入輸出
0ZERO
12TWELVE
100ONE HUNDRED
1200ONE THOUSAND TWO HUNDRED
16312SIXTEEN THOUSAND THREE HUNDRED TWELVE
1000000ONE MILLION

設計亮點

  • static count 跨遞歸層級傳遞千分位層數,無需額外參數。
  • 字符串拼接直接在 buffer 上操作,調用者負責分配足夠空間。
  • 處理 10~19 特殊詞彙,符合英語讀法習慣。

此算法是金融系統、報表生成中數字轉文字的基石實現。

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