題目連結:
題目大意:
輸入有多列,每列給定一個以中文表示的數字。將其轉成阿拉伯數字並輸出。
中文會出現的符號有:
{"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}
{"十", "百", "千"}
{"萬", "億", "兆"}
且其代表的數字會小於一京(10 ^ 16)。
範例輸入:
二
二十五
二百零五
一千零五十
二十萬零五百
二十萬五千
二億零五千
二十一億四千七百四十八萬三千六百四十七
範例輸出:
2
25
205
1050
200500
205000
200005000
2147483647
解題思維:
中文的處理方式
先前的文章有提及,ZeroJudge 上的中文編碼佔三個位元組,也就是存進一般字串時會佔三個字元的位置。
至於要轉成阿拉伯數字,我們可以將給定的中文數字字串依據「兆」、「億」、「萬」這種大單位將字串切成好幾個部分。
然後取每個部份的大單位前的字串(例如「二十一億」的「二十一」)再去處理。而方式也是類似的,就是依據「千」、「百」、「十」切成更小的部分。
例如:「二千一百零三萬」的「二」,其代表著 2 的值,而其位於的小部分為「千」的部分,因此其實際上是 2000。以此類推,「萬」前的整個部分值為 2103 ,而因為這個部分為「萬」,因此整個部分實際上代表著是 21030000。
其他中文數字也是同理。但是因為數字可以到 10 ^ 16 左右,因此如果像是 C 、 C++ 這種有存儲範圍限制的需要將變數宣告為長整數(long long)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。