

\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);
}
本文分享了一种将中文数字转换为读音的算法实现,通过处理不同位数的数字并结合单位,如千、万、亿等,完成从数字到汉字读音的转换。程序能够处理从个位数到亿级的数字,并考虑了特殊情况,如零的处理和单位的正确使用。
593

被折叠的 条评论
为什么被折叠?



