题目描述
给定一个不超过 9 位的整数,你应该用传统的中文方式阅读它.
如果是负数,则先输出 Fu。
例如,-123456789 读作 Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu。
注意:零(ling)必须按照中国传统正确处理。
例如,100800 读作 yi Shi Wan ling ba Bai。
输出格式
输出给定数字的中文读法,注意结尾不能有多余空格。
样例
输入样例1:
-123456789
输出样例1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
输入样例2:
100800
输出样例2:
yi Shi Wan ling ba Bai
算法
C++ 代码
#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) { //如果上一位是0
ans += "ling ";
zero = false;
}
//输出数字+单位
ans += Num[num] + ' ';
if (j != 0) ans += dan[j] + ' ';
}
else { //如果当前数字为0
zeroCnt++;
zero = true;
}
len--;
}
//位数大于4位,且该段不全为0,输出亿或者万
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;
}