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
Ω
救命,好难啊,我再一次体会到了中国文化的博大精深。
- 你真的会用汉语读数字吗?
- 会啊会啊
- 你能教会计算机读吗?
- 简简单单
-(to Mr.Computer)每个数字读完后加上它的位名
-(Mr.Computer)一十万二万三千四百五十六(?)(12,3456)
-(to Mr.Computer)。。最后一位是没名字的,【亿】和【万】只在 位置输出
-(Mr.Computer)一亿零千零百零十零万零千零百零十一(1,0000,0001)
-(to Mr.Computer)诶诶诶,连续的0只要输出一个就够了, 都是0的话就不用输出位名了
-(Mr.Computer)一千零一十零(1010)
-(to Mr.Computer)。。。末尾的零不用输出
-(Mr.Computer)(null)(0)
-(to Mr.Computer)啪
-(Mr.Computer)卒
坑点基本都在上面了,两个坑点尤为突出:1. 0的处理;2. 亿万何时输出。对于0的问题,我们可以设置一个zero布尔变量,当有0出现时将其置true,然后到非0数字出现时检查zero,若为true则先加上0的读音,再将zero置false。但会出现yi Bai Wan ling yi Qian(1001000)的情况,因此在输出亿和万后也需要将zero置false。对于亿万的输出也是设置一个flag布尔数组,出现非0数后将 的flag置true,等到 位置时检查相应flag若为true则输出。另外别忘记特殊情况0。
🐎
#include <iostream>
using namespace std;
int main()
{
string n, py[] = {"ling ", "yi ", "er ", "san ", "si ", "wu ", "liu ", "qi ", "ba ", "jiu "},
ans, sfx[] = {"", "Shi ", "Bai ", "Qian ", "Wan ", "Shi ", "Bai ", "Qian ", "Yi "};
bool flag[3] = {false, false, false}, zero = false;
cin >> n;
ans += n[0] == '-' ? (n.erase(0, 1), "Fu ") : "";
for (int i = 0; i < n.size(); ++i)
{
if (n[i] == '0')
{
zero = true;
int r = int(n.size() - i - 1);
if (flag[r / 4] && r % 4 == 0)
{
ans += sfx[r];
zero = false;
}
continue;
}
ans += zero ? (zero = false, py[0]) : "";
ans += py[n[i] - '0'] + sfx[n.size() - i - 1];
flag[(n.size() - i - 1) / 4] = true;
}
if (n == "0") ans += py[0];
ans.erase(ans.size() - 1);
cout << ans;
}