官网
1082. Read Number in Chinese (25)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
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
题目思路
- 1.把一个少于等于9位数翻译成中文拼音输出。
- 2.注意10101010,10100101,-101010101。
解题思路
- 1.我是先读亿位,然后读万位,然后读后面四位,其中万位的那四位数可以先利用读后面四位数的方法读出,然后再输出’wan’,以及看情况决定是否在其后面输出’ling’。
AC代码
#include<iostream>
#include<string>
using namespace std;
string shuwei[] = {"Shi","Bai","Qian","Wan","Yi"};
string shuzi[] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
int now;
bool biggerThan9999 = false;
void read_it(int k){
//先读亿位
if (k>99999999)
{
now = k / 100000000;
k = k % 100000000;
cout << shuzi[now] << " Yi";
if (k>0)
{
cout << " ";
if (k>9999999)
{
read_it(k);
}
else{
cout << "ling ";
read_it(k);
}
}else
cout << endl;
}
//递归读万位
else if (k>9999)
{
now = k / 10000;
int nx = k % 10000;
read_it(now);
cout << " Wan";
if (nx==0)
{
cout << endl;
return;
}
//这个是读出万位后与后面的衔接阶段,看是否要输出ling
if (nx>0&&nx<1000)
{
cout << " ling";
}
cout << " ";
read_it(nx);
}
//读后面四位也用到递归了
else if (k>999)
{
now = k / 1000;
int nx = k % 1000;
cout << shuzi[now] << " Qian";
if (nx == 0)
{
if (biggerThan9999)
{
biggerThan9999 = false;
}
else{
cout << endl;
return;
}
}
else
{
if (nx<100)
{
cout << " ling";
}
cout << " ";
read_it(nx);
}
}
else if (k>99)
{
now = k / 100;
int nx = k % 100;
cout << shuzi[now] << " Bai";
if (nx == 0)
{
if (biggerThan9999)
{
biggerThan9999 = false;
}
else{
cout << endl;
return;
}
}
else
{
if (nx<10)
{
cout << " ling";
}
cout << " ";
read_it(nx);
}
}
else if (k>9)
{
now = k / 10;
int nx = k % 10;
cout << shuzi[now] << " Shi";
if (nx == 0)
{
if (biggerThan9999)
{
biggerThan9999 = false;
}
else{
cout << endl;
return;
}
}
else
{
cout << " ";
read_it(nx);
}
}
else if (k>0)
{
cout << shuzi[k];
if (biggerThan9999)
{
biggerThan9999 = false;
}
else{
cout << endl;
return;
}
}
}
int main(){
int num;
cin >> num;
if (num==0)
{
cout << "ling" << endl;
return 0;
}
if (num<0)
{
cout << "Fu" << " ";
num = -num;
}
if (num>9999)
{
biggerThan9999 = true;
}
read_it(num);
return 0;
}