U624127 教教我们!东雪莲学姐!

题目背景

原题:CatOJ 【0713 初2023B】教教我们!东雪莲学姐! 题面来自 @Sharkat_Star,如有问题请私信解决。 如果需要这道题的标程或题解,请私信 @Sharkat_Star,她会马上去写。

题目描述

> 作为一名熟练掌握中日英三门语言的不太常见的虚拟主播,东雪莲每天都会被很多人问外语问题。今 天,他们给出很多数字,问这些数字在外语里怎么读。对于她,用外语念出这些数字轻而易举,但是 数字的个数实在太多了,所以她想让你编写一个程序,回答这些粉丝的问题。 你需要编写一个程序,实现输入一个不大于 $10^{12}$ 的非负整数后,用英语或日语写出这个数字。 **英语(省略所有and,在美式英语允许的范围内)写数字的规则如下:** **$0$ 到 $9$ 的写法:** | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| | zero | one | two | three | four | five | six | seven | eight | nine | **两位数的写法:** + 对于小于$19$ 的两位数: | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| | ten | eleven | twelve | thirteen | fourteen | fifteen | sixteen | seeventeen | eighteen | nineteen | + 对于除 $10$ 外 $10$ 的倍数: | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| | twenty | thirty | forty | fifty | sixty | seventy | eighty | ninety | **对于其他两位数:** 先写出去掉个位数后构成的10的倍数,再写个位数,两者之间用连字符 `-` 连接 例如 $67$ 写作 `sixty-seven`,$23$ 写作`twenty-three`。 **三位数的写法:** + 对于 $100$ 的倍数: 取出百位数,参照 $1$ 到 $9$ 的写法写出,再加 `hundred`,两者之间以一个空格隔开 例如 $400$ 写作 `four hundred`。 + 对于其他的三位数: 先写出去掉十位、个位后构成的 $100$ 的倍数,再写出十位、个位构成的两位数(若十位为 $0$ 则写出个位 数),两者之间以一个空格隔开 例如 $234$ 写作 `two hundred thirty-four`,$204$ 写作 `two hundred four`。 **大于三位的数字的写法:** 大于三位的数字需要借助数量单位写出,英语中的数量单位写法如下: | $10^3$ | $10^6$ | $10^9$ | |:-:|:-:|:-:| | thousand | million | billion | 在三位数后加上数量单位(两者之间以一个空格隔开),可以使该三位数的值扩大相应倍数。 例如 $1$ 写作 `one`,则 `one thousand` 表示 $1000$;$123$ 写作 `one hundred twenty-three`,则`one hundred twenty-three thousand` 表示 $123000$。 在写大于三位的数字时,先将其从低位到高位三位一组划分成若干个位数不超过三位的部分,再按照从高位到低位的顺序写出每个非零部分并加上相应数量单位。 例如: $1234567890$,三位一组划分后为:$1,234,567,890$: | 划分后的部分 | 写法 | 数量单位 | |:-:|:-:|:-:| | $1$ | one | billion | | $234$ | two hundred thirty-four | million | | $567$ | five hundred sixty-seven | thousand | | $890$ | eight hundred ninety | 无 | 各部分连起来,写作 `one billion two hundred thirty-four million five hundred sixty-seven thousand eight hundred ninety`。 $1230000890$,三位一组划分后为:$1,230,000,890$,读作 `one billion two hundred thirty million eight hundred ninety`。 **日语中的数字写法如下:** **$0$ 到 $9$ 的写法:** | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| | zero | ichi | ni | san | yon | go | roku | nana | hachi | kyuu | **四位数的写法:** 四位数数字需要借助三个数量单位写出,写法如下: | 10 | 100 | 1000 | |:-:|:-:|:-:| | juu | hyaku | sen | 在一位数($2$ 到 $9$ 之间,不包括 $1$)后直接加上上述三种数量单位中的一种(无间隔),可以使该一位数的值扩大相应倍数。 例如 $7$ 写作 `nana`,则 `nanahyaku` 表示 $700$。 特殊地,由于音便,下面列举的 $5$个数字 + 数量单位的组合不遵守上述规则: | $300$ | $600$ | $800$ | $3000$ | $8000$ | |:-:|:-:|:-:|:-:|:-:| | san**by**aku | ro**ppya**ku | ha**ppya**ku | san**ze**n | ha**sse**n | 在写四位数时,从高到底一位一位地写出所有非零位,每一位的数字后面加上相应的数量单位(除个位外)。 例如 $2345$,从高到底的每一位分别为 $2,3,4,5$: | 每一位 | 写法 | 数量单位 | 组合后 | |:-:|:-:|:-:|:-:| | $2$ | ni | sen | nisen | | $3$ | san | hyaku | sanbyaku | | $4$ | yon | juu | yonjuu | | $5$ | go | / | go | 各部分连起来,写作 `nisensanbyakuyonjuugo`。 若 $1$ 位于该四位数的千位、百位或十位,则 $1$ 不必写出,只需写出相应的数量单位即可。 例如:$1111$ 写作 `senhyakujuuichi`,而不是 `ichisenichihyakuichijuuichi`。 **大于四位数字的写法:** 大于四位的数字需要借助另外两种数量单位写出,写法如下: | $10^4$ | $10^8$ | |:-:|:-:| | man | oku | 在四位数后直接加上上述两种数量单位的一种(无间隔),可以使该四位数的值扩大相应倍数。 例如: $1$ 写作 `ichi`,则 `ichiman` 表示 $10000$;$1234$ 写作 `sennihyakusanjuuyon`,则 `sennihyakusanjuuyonman` 表示 $12340000$。 在写大于四位的数字时,从低位到高位四位一组划分成若干个四位数,按照从高位到低位的顺序写出每个四位数并加上相应数量单位。 例如: $1234567890$,四位一组划分后为:$12,3456,7890$。 | 划分后的部分 | 写法 | 数量单位 | |:-:|:-:|:-:| | $12$ | juuni | oku | | $3456$ | san**ze**nyonhyakugojuuroku | man | | $7890$ | nanasenha**ppya**kukyuujuu | 无 | 各部分连起来,写作 `juuniokusanzenyonhyakugojuurokumannanasenhappyakukyuujuu`。 特殊地,当在 $1000$ 后加数量单位 `man` 时,$1000$ 写作 `issen` 而不是 `sen`;当 `man` 加在其他四位数之后时无此现象。 例如: $100010001000$ 写作 `senokuissenmansen`,而不是 `senokusenmansen`。 $11001100$ 写作 `senhyakumansenhyaku`。

输入格式

第一行输入一个整数 $T$ 和一个大写字母 $M$,两者之间以一个空格隔开。其中,$T$ 表示询问的次数,$M$ 则代表目标语言。 接下来 $T$ 行,每行一个正整数 $a_i$,表示一次询问。

输出格式

对于每次询问,输出一行字符串,表示该次询问的数字在目标语言的写法。 若大写字母 $M='E'$,则目标语言为英语;若大写字母 $M='J'$,则目标语言为日语。

说明/提示

对于 $100\%$ 的数据,保证 $1\le T\le 10^5,0\le a_i\le 10^{12},M\in \{'E','J'\}$。 数据未加入。