题目描述 Description
给出一个整数,整数的位数不超过九位,按照下列读法读出这个整数,如果这个数是负数,要先输出Fu。例如,-314159265 读作:Fu san Yi yi Qian si Bai yi Shi wu Wan jiu Qian er Bai liu Shi wu。注意:对于数字中出现的0,要正确的读出。例如,100700 读作:yi Shi Wan ling qi Bai。
输入描述 Input Description
一行,一个不超过9位的整数
输出描述 Output Description
输出一行,按照要求输出,字符之间用空格隔开,行尾不能有多余的空格。
样例输入 Sample Input
样例输入1: -314159265 样例输入2: 100700
样例输出 Sample Output
样例输出1: Fu san Yi yi Qian si Bai yi Shi wu Wan jiu Qian er Bai liu Shi wu 样例输出2: yi Shi Wan ling qi Bai
#include<bits/stdc++.h>
using namespace std;
string dan[]={"Ge","Shi","Bai","Qian","Wan","Yi"};
string Num[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
string convertNum(string str){
string ans;
if(str[0]=='0'){
return "ling";
}
if(str[0]=='-'){
ans="Fu ";
str.erase(0,1);
}
int len=str.length();
int i=0;
while(len){
int zeroCnt=0;
bool zero=false;
for(int j=(len-1)%4;j>=0;j--){
int pos=str.length()-len;
int num=str[pos]-'0';
if(num>0){
if(zero){
ans+="ling ";
zero=false;
}
ans+=Num[num]+' ';
if(j!=0) ans+=dan[j]+' ';
}else{
zeroCnt++;
zero=true;
}
len--;
}
if(len/4>0&&zeroCnt!=4) ans+=dan[3+len/4]+' ';
}
ans.pop_back();
return ans;
}
int main(){
string str;
cin>>str;
str=convertNum(str);
cout<<str;
return 0;
}