Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way. Output Fu first if it is negative. For example, -123456789 is read as Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu. Note: zero (ling) must be handled correctly according to the Chinese tradition. For example, 100800 is yi Shi Wan ling ba Bai.
Input Specification:
Each input file contains one test case, which gives an integer with no more than 9 digits.
Output Specification:
For each test case, print in a line the Chinese way of reading the number. The characters are separated by a space and there must be no extra space at the end of the line.
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
类型:字符串处理
题目大意:用中国传统的方式去读数字,比如-123456789读作Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu,注意0(ling)必须按照中国传统方式去处理,100800读作yi Shi Wan ling ba Bai
#include<iostream>
#include<string>
#include<vector>
using namespace std;
string nums[] = { "ling","yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
string unit[] = {"","Shi","Bai","Qian"};
vector<string>ret;
string a;
int cnt = 0;
int main(){
cin >> a;
if (a.length() == 1 && a[0] == '0') {
printf("ling");
return 0;
}
if (a[0] == '-'){
ret.push_back("Fu");
cnt++;
}
int len = a.length(), flag = 0, uniflag = 0;//flag==1表示之前有0位;uniflag==1表示之前有不为0的数
if (len - cnt == 9){//如果数字为九位数(做多有9位,有第九位即有“亿”位)
ret.push_back(nums[a[cnt++]-'0']);
ret.push_back("Yi");
}
if (len - cnt > 4) { //如果数字有4位数以上,即数字在“万”位以上
for (; cnt < len-4; cnt++) {
char tmp = a[cnt];
if (tmp == '0') {
flag = 1;
continue;
}
if (flag == 1) {//非零数之前有零,则要输出零
ret.push_back(nums[0]);
flag = 0;
}
ret.push_back(nums[tmp - '0']);
if(len - 5 - cnt!=0)
ret.push_back(unit[len - 5 - cnt]);
uniflag = 1;//“万”的单位上有非零数,要输出“万”这个单位
}
}
if (uniflag == 1)
ret.push_back("Wan");
flag = 0;
for (; cnt < len; cnt++) {//四位数以内的数
char tmp = a[cnt];
if (tmp == '0') {
flag = 1;
continue;
}
if (flag == 1) {
ret.push_back(nums[0]);
flag = 0;
}
ret.push_back(nums[tmp - '0']);
if(len - 1 - cnt !=0)
ret.push_back(unit[len - 1 - cnt]);
}
for (int i = 0; i < ret.size(); i++) {
if (i != 0)
printf(" ");
printf("%s", ret[i].c_str());
}
return 0;
}