網上看了許多說法,感覺這個事情本身不複雜,不過也沒許多人嘴炮說得那麼簡單。想法誰都有,都覺得自己能實現,不過許多人「信誓旦旦」地把這個寫了之後,發現會報各種各樣的錯誤。在此我把**寫上,附上我的想法。
這種最簡單,1——一,2——二,以此類推。記住不要忘了0——零
十——10,百——100,千——1000,記住沒有萬,因為萬和億很特殊,前後的級數都是數字計數法
這些項出現的時候,前面累計求和的所有數字都要乘以該項。比如「三百三十七萬」
萬——10000
這一項的設計是防止億和萬同時出現的時候,被乘了兩次。
許多人自以為是的倒著讀入,實際上是為問題新增了許多難度。
我傾向於正著讀入,比如「一千三百四十八」這個數,讀了1,再讀數量級項「千」,就把剛剛讀入的數乘以1000,然後加到總和裡歸零。
【注意】在正著讀入的時候,要判斷某一項後面沒有「乘積項」【或者到達了數字末尾】,如果有,說明讀到了個位,這時候不應繼續讀下去了,而是應直接加上該個位數。不要再等著乘以數量級項了。
**如下:
vocabulary =
quantity_dict =
stamp_dict =
defliter_to_number_under_yi
(a):
ifnot a:
return
0 sum = 0
value = 0
for num in range(len(a)):
if a[num] in vocabulary:
print
value = vocabulary[a[num]]
if num+1 >= len(a) or a[num+1] in stamp_dict:
sum += value
value = 0
elif a[num] in quantity_dict:
value = value * quantity_dict[a[num]]
sum += value
value = 0
elif a[num] in stamp_dict:
sum *= stamp_dict[a[num]]
#最後加乙個判斷,sum_all和sum哪個大。【漢字轉數字,技巧:從左往右轉,判斷下一位是不是萬,億等。在萬億的時候,要記得清空】
return sum
deflitertonum
(a):
a_list = a.split(u"億")
print a_list[0]
print a_list[1]
return liter_to_number_under_yi(a_list[0])*100000000+liter_to_number_under_yi(a_list[1])
a = u"一千二百五十一萬零一億一千二百五十八萬零一百三十四"
litertonum(a)
**從「億」這個地方分隔,分隔後兩邊分別跑這個子函式。然後得到結果 阿拉伯數字轉漢字數字 C
using system using system.collections.generic using system.text public class numtocharactor private string unit new string public numtocharactor publi...
將漢字數字轉換成阿拉伯數字
前一段時間看乙個帖子上在討論這個演算法,跟帖的有一百多人。發的演算法也不下十個。不過我覺的這個是做好的乙個,總結如下。如有問題往大家校正!number 用來對映 一,二,三.unit用來對映十,百,千.struct number struct unit 下面是具體演算法部分,思路非常 簡單就是從右至...
阿拉伯數字轉成漢字
做乙個中醫專案時後台返回是阿拉伯數字,專案需求是需要轉化為中文數字,記錄一下轉化方法,感覺要比那種switch.case.拓展性好一點。因為當時不會超過一千,所以就寫到了百位,其他需求可以自行更改一下。當然預設傳的是整數型別的。public class numbertochineseutil str...