切換
舊版
前往
大廳
主題

ZeroJudge - e630: 中文數字 解題心得

Not In My Back Yard | 2020-10-18 00:00:12 | 巴幣 0 | 人氣 153

題目連結:


題目大意:
輸入有多列,每列給定一個以中文表示的數字。將其轉成阿拉伯數字並輸出。

中文會出現的符號有:
{"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}
{"十", "百", "千"}
{"萬", "億", "兆"}
且其代表的數字會小於一京(10 ^ 16)。



範例輸入:
二十五
二百零五
一千零五十
二十萬零五百
二十萬五千
二億零五千
二十一億四千七百四十八萬三千六百四十七


範例輸出:
2
25
205
1050
200500
205000
200005000
2147483647


解題思維:
中文的處理方式先前的文章有提及,ZeroJudge 上的中文編碼佔三個位元組,也就是存進一般字串時會佔三個字元的位置。



至於要轉成阿拉伯數字,我們可以將給定的中文數字字串依據「兆」、「億」、「萬」這種大單位將字串切成好幾個部分。

然後取每個部份的大單位前的字串(例如「二十一億」的「二十一」)再去處理。而方式也是類似的,就是依據「千」、「百」、「十」切成更小的部分。

例如:「二千一百零三萬」的「二」,其代表著 2 的值,而其位於的小部分為「千」的部分,因此其實際上是 2000。以此類推,「萬」前的整個部分值為 2103 ,而因為這個部分為「萬」,因此整個部分實際上代表著是 21030000。

其他中文數字也是同理。但是因為數字可以到 10 ^ 16 左右,因此如果像是 C 、 C++ 這種有存儲範圍限制的需要將變數宣告為長整數(long long)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

屠屠
哈哈 我出的數字轉中文被跳過
2020-12-03 19:01:33
Not In My Back Yard
我還放在暫存表裡還沒做XD
我常常會一個題目系列寫一寫就會跳到別的地方,可能改天就又會回來寫了
2020-12-03 20:25:41

更多創作