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

PAT 1082 中文讀數字:9 位整數轉漢語拼音完整解法

     編輯:關於C++

題目要求

輸入不超過 9 位整數(可負),按中文習慣讀出。負數前加 "Fu"。正確處理 0(ling)的讀法:如 100800 → "yi Shi Wan ling ba Bai"。

中文數字結構

  • 基本數字:ling, yi, er, san, si, wu, liu, qi, ba, jiu
  • 單位:Shi(十), Bai(百), Qian(千)
  • 大單位:Wan(萬), Yi(億)

處理策略

  1. 處理負號,輸出 "Fu"
  2. 按 4 位分組(個、萬、億),從高位向低位處理
  3. 組內處理:跳過前導 0,中間 0 輸出一次 "ling"
  4. 組後加大單位(Wan/Yi),但全 0 組不輸出單位

關鍵邏輯:show 函數

void show(string s, bool first) {
    int i = 0, last = -1;
    while (i < s.size() && s[i]=='0') ++i;
    if (i != 0 && (ans.empty() || ans.back()!="ling")) ans.push_back("ling");
    for (; i < s.size(); ++i) {
        if (last+1 != i) ans.push_back("ling");
        last = i;
        ans.push_back(num[s[i]-'0']);
        ans.push_back(step[s.size()-1-i]);
        while (i+1 < s.size() && s[i+1]=='0') ++i;
    }
}

樣例驗證

-123456789 → Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
100800 → yi Shi Wan ling ba Bai

易錯點總結

  • 組內連續 0 只讀一個 "ling"
  • 最高組無前導 0,不需額外判斷
  • 輸出無尾隨空格
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved