1082. Read Number in Chinese (25)
#include <bits/stdc++.h>
using namespace std;
vector<string> a={"ling ","yi ","er ","san ","si ","wu ","liu ","qi ","ba ","jiu "};
vector<string> b={"","Shi ","Bai ","Qian "};
vector<string> c={"","Wan ","Yi "};
string readNumber(string n)
{
string ans;
if(n[0]=='0') ans+="ling ";
n=to_string(stoi(n));
while(n.size()>0)
{
if(n=="0") break;
ans+=a[n[0]-'0']+b[n.size()-1];
if(n.size()==1) break;
string temp=to_string(stoi(n.substr(1)));
if(n.size()>temp.size()+1&&temp!="0")//中间有零
ans+="ling ";
n=temp;
}
return ans;
}
int main()
{
string num,ret;
cin>>num;
if(num=="0")
{
cout<<"ling";
return 0;
}
if(num[0]=='-')
{
cout<<"Fu ";
num=num.substr(1);
}
while(num.size()>0)
{
int pos=(num.size()%4==0)?4:num.size()%4;
ret+=readNumber(num.substr(0,pos));
num=num.substr(pos);
ret+=c[num.size()/4];//读亿万
}
ret.pop_back();
cout<<ret;
return 0;
}

本文介绍了一个使用 C++ 实现的将阿拉伯数字转换为中文读法的方法。通过多个字符串向量来对应中文数字、十百千万等单位以及亿、万等更大的单位,实现了对输入数字的准确读取。该程序能够正确处理包括零在内的各种数字组合。
2192

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



