PAT甲级 1082 Read Number in Chinese (25 分) 题解

本文分享了一种将中文数字转换为读音的算法实现,通过处理不同位数的数字并结合单位,如千、万、亿等,完成从数字到汉字读音的转换。程序能够处理从个位数到亿级的数字,并考虑了特殊情况,如零的处理和单位的正确使用。
部署运行你感兴趣的模型镜像

在这里插入图片描述在这里插入图片描述
\quad这个题很难考虑周全,博主最后一个测试用例过不了。我的想法是四个四个数处理,再加上单位组合在一起,但其中有些情况没考虑到,后期会更新。程序如下:

#include <iostream>
using namespace std;

string m[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
// 传入一个长度小于等于4的数字字符串,返回该字符串读音,比如2233,返回 er qian er bai san shi san
string speak(string s)
{
    string res = "";
    if(s[0]=='0') res += "ling ";
    for (int i = 0; i < s.length(); ++i) {
        if (s[i] != '0') {
            res += m[s[i]-'0']+' ';
            if (s.length() - i == 4) res += "Qian ";
            else if (s.length() - i == 3) res += "Bai ";
            else if (s.length() - i == 2) res += "Shi ";
        }
    }
    return res;
}

string solve(string s)
{
    string res = "";
    if(s.length()<=4) res += speak(s);
    else if(s.length()>4 && s.length()<=8) 
    {
        if(speak(s.substr(s.length()-4))=="ling ")
            res += speak(s.substr(0, s.length()-4))+"Wan ";
        else res += speak(s.substr(0, s.length()-4))+"Wan "+speak(s.substr(s.length()-4));
    }
    else if(s.length()==9)
    {
        if(speak(s.substr(1, 4))=="ling " && speak(s.substr(5))=="ling ")
            res += speak(s.substr(0, 1)) + "Yi ";
        else if(speak(s.substr(1, 4))=="ling " && s[5]=='0')
            res += speak(s.substr(0, 1)) + "Yi " + speak(s.substr(5));
        else if(speak(s.substr(1, 4))=="ling " && s[5]!='0')
            res += speak(s.substr(0, 1)) + "Yi ling " + speak(s.substr(5));
        else
            res += speak(s.substr(0, 1)) + "Yi " + speak(s.substr(1, 4)) + "Wan " + speak(s.substr(5));
    }
    return res.substr(0, res.length()-1);
}
int main()
{
    string s;
    cin >> s;
    if(s[0]=='-') {
        cout << "Fu ";
        s = s.substr(1);
    }
    cout << solve(s);
}

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值