e379: 數字轉中文
Tags : 中文數字
Accepted rate : 5人/5人 ( 100% ) [非即時]
評分方式:
Tolerant

最近更新 : 2019-09-16 09:12

Content

相信一些已經出社會當工程師的前輩都解過一題很古老的題目a008: 中文大寫數字
由於當時補零爭議很大最終題目被廢棄了
所以我詢問許多國小老師確認了補零規則
我也把這些規則寫在維基百科上

-個位以前的「0」要寫或讀出來,但連續的0只要寫或讀一個便可。例如:10002 應寫成「一萬零二」。
-若千位不為零,且萬位為零;或者是千萬位不為零,且億位為零,則不需要補讀零。例如:205,000讀作「二十萬五千」。
-說明:若要補零應是「二十『零』萬五千」,而非「二十萬『零』五千」,因為零是在萬位,且後者補法有誤,萬位和千位中間並無其他位數,不能補上任何數字。
-若一組萬進位數皆為零時,則需補零。例如:200005000讀作「二億零五千」

所以補零規則需要按照以上方式
不會像a008的寬鬆補零規則

Input

每筆測資兩個資料 T N
第一個是大小寫(T) 0是小寫 1是大寫
第二個是數字(N)
每個測資點以EOF結束

Output

寫出中文數字的寫法並且大小寫要正確
0注意不管大小寫都是寫零
其餘根據以下陣列來決定
{{"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}, {"零", "壹", "貳", "參", "肆", "伍", "陸", "柒", "捌", "玖"}}
{{"", "十", "百", "千"}, {"", "拾", "佰", "仟"}}
{"", "萬", "億", "兆", "京", "垓", "秭", "穰", "溝", "澗", "正", "載"}

Sample Input
0 0
1 2
0 20
0 25
1 200
0 205
1 123
0 1050
1 20000
0 200000
1 200500
0 205000
1 210500
0 215000
1 200005000
0 200000500
1 200000000
0 00123
1 001000040040
0 090807060504
Sample Output
零
貳
二十
二十五
貳佰
二百零五
壹佰貳拾參
一千零五十
貳萬
二十萬
貳拾萬零伍佰
二十萬五千
貳拾壹萬零伍佰
二十一萬五千
貳億零伍仟
二億零五百
貳億
一百二十三
壹拾億零肆萬零肆拾
九百零八億零七百零六萬零五百零四
測資資訊:
記憶體限制: 64 MB
公開 測資點#0 (10%): 1.0s , <1K
公開 測資點#1 (20%): 1.0s , <1M
公開 測資點#2 (30%): 1.0s , <1M
公開 測資點#3 (40%): 1.0s , <1M
Hint :

測資點00,10%,0 <= N < 10^12,共20筆
測資點01,20%,0 <= N < 10^24,共200筆
測資點02,30%,0 <= N < 10^36,共2000筆
測資點03,40%,0 <= N < 10^48,共20000筆

測資點00就是範例測資
所以至少要能先過的了測資點00在上傳程式碼
然後不需要做極端優化
測資點03只是防止作弊而已並不會有超時問題
所以大小寫可以寫成2維陣列(如果是用C語言加上字串是字元陣列就會變3維)

本題兩種解法
我本身是用刪去法
將所有數字和位數名稱串好再慢慢刪去
另一種是兩個布林去判斷是否補零
第一個布林判斷十百千補零
第二個布林判斷萬億兆京補零

Tags:
中文數字
出處:
[管理者:
wj654cj86 (屠屠)
]


ID User Problem Subject Hit Post Date
沒有發現任何「解題報告」