题意:
用汉语拼音读出不超过9位的数字,包括负数,例如:
Sample Input 1:-123456789
Sample Output 1:Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
Sample Input 2:100800
Sample Output 2:yi Shi Wan ling ba Bai
#include <iostream>
#include <fstream>
#include <vector>
/**
1.单个数字零的特殊处理
2.连续多个零的处理方法
**/
using namespace std;
string c_nums[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
string c_weishu[6]{"Ge","Shi","Bai","Qian","Wan","Yi"};
string get_chinese(string num1){
string chinese_num="";
for(int i=0;i<num1.length();){
while(num1[i]-'0'==0){
++i;
if(i>=num1.length())break;
if(num1[i]-'0'!=0&&i<num1.length()){
if(chinese_num.length()==0){
chinese_num+="ling";
}else{
chinese_num+=" ling";
}
}
}
if(i>=num1.length())break;
else{
if(chinese_num.length()==0){
chinese_num+=c_nums[num1[i]-'0']+" "+c_weishu[num1.length()-1-i];
}else{
chinese_num+=" "+c_nums[num1[i]-'0']+" "+c_weishu[num1.length()-1-i];
}
i++;
}
}
if(chinese_num.length()>3&&chinese_num.substr(chinese_num.length()-3,3)==" Ge"){
chinese_num=chinese_num.substr(0,chinese_num.length()-3);
}
return chinese_num;
}
int main()
{
ifstream cin("data.txt");
string num,chinese_num;
cin>>num;
string fu="";
if(num.length()==1&&num[0]=='0'){
cout<<"ling\n";
return 0;
}
if(num[0]=='-'){
fu="Fu ";
num=num.substr(1,num.length()-1);
}
if(num.length()==9){
chinese_num+=c_nums[num[0]-'0']+" "+c_weishu[5];
num=num.substr(1,num.length()-1);
}
if(num.length()>4){
string num1=num.substr(0,num.length()-4);
string rs=get_chinese(num1);
if(rs.length()>0)
rs+=" Wan";
if(rs.length()>0&&chinese_num.length()>0){
chinese_num+=" "+rs;
}else
chinese_num+=rs;
num=num.substr(num1.length(),5);
rs=get_chinese(num);
if(rs.length()>0&&chinese_num.length()>0)
chinese_num+=" "+rs;
else
chinese_num+=rs;
}else{
chinese_num+=get_chinese(num);
}
cout<<fu<<chinese_num<<endl;
return 0;
}