首页 > 其他 > 详细

PAT - A1078

时间:2020-03-02 09:26:22      阅读:72      评论:0      收藏:0      [点我收藏+]

1082 Read Number in Chinese (25point(s))

  • 边界条件复杂,代码dirty
    • Number == 0时,发零音
    • Number 万~千万位 == 0 时,Wan不发音
  • 源码
#include<bits/stdc++.h>

/*
ID   : A1082
TYPE : String
TIME : 2020.3.2
DURANCE :
NOTICE :
    边界条件要考虑挺多,代码较为dirty
    Number == 0时,发零音
    Number 万~千万位 == 0 时,"Wan"不发音
*/

using namespace std;

string Number;
string digit[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
string degree[6] = {"_", "Shi", "Bai", "Qian", "Wan", "Yi"};

int main(void) {
    vector<string> Result;
    cin >> Number;
    reverse(Number.begin(), Number.end());
    bool flag = false; // 控制位,如果出现了非零数那本四位下个零发音,否则不发音
    for (int i = 0; i < Number.size(); ++i) {
        if (Number[i] == '-') {
            Result.push_back("Fu");
        }
        else if (i < 4) {
            if (Number[i] != '0') {
                flag = true; // 本四位下个零发音
                if (i > 0) Result.push_back(degree[i]);
                Result.push_back(digit[Number[i] - '0']);
            }
            if (flag && Number[i] == '0') {
                Result.push_back(digit[0]);
                flag = false; // 本四位下个零又不发音
            }
        } else if (i == 4){
            flag = false; // 下四位
            Result.push_back(degree[4]);
            if (Number[i] != '0') {
                flag = true; // 下个零发音
                Result.push_back(digit[Number[i] - '0']);
            }
        }
        else if (i > 4 && i < 8){
            if (Number[i] != '0') {
                flag = true; // 下个零发音
                Result.push_back(degree[i-4]);
                Result.push_back(digit[Number[i] - '0']);
            }
            if (flag && Number[i] == '0') {
                Result.push_back(digit[0]);
                flag = false; // 本四位下个零不发音
            }
        } else if (i == 8) {
            if (Number[7] == '0' &&Number[6] == '0' &&Number[5] == '0' &&Number[4] == '0')
                Result.pop_back(); // 连续四个0则将“Wan"删除
            Result.push_back(degree[5]);
            if (Number[i] != '0') Result.push_back(digit[Number[i] - '0']);
        }
    }
    if (Number.size() == 1 && Number[0] == '0') Result.push_back(digit[0]);
    for (int i = Result.size()-1; i >= 0 ; --i) cout << Result[i] << ((i==0)?"\n":" ");

    return 0;
}

PAT - A1078

原文:https://www.cnblogs.com/XyLee/p/12393419.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!