人民幣金額列印,將金額數字轉換為漢字描述。

2021-10-22 03:53:17 字數 3505 閱讀 1885

題目描述:

銀行在列印票據的時候,常常需要將阿拉伯數字表示的人民幣金額轉換為大寫表示,現在請你來完成這樣乙個程式。

在中文大寫方式中,0到10以及100、1000、10000被依次表示為: 零 壹 貳 叄 肆 伍 陸 柒 捌 玖 拾 佰 仟 萬

以下的例子示範了阿拉伯數字到人民幣大寫的轉換規則:

1 壹圓

11 壹拾壹圓

111 壹佰壹拾壹圓

101 壹佰零壹圓

-1000 負壹仟圓

1234567 壹佰貳拾叄萬肆仟伍佰陸拾柒圓

現在給你乙個整數a(|a|<100000000), 請你列印出人民幣大寫表示.

例如:a=1

則輸出:壹圓

1:把數字金額轉為文字描述,首先數字0-9轉為中文很簡單,根據對應關係一一轉換即可,得到第乙個轉換列表trans_list1,具體可對照**看。

2:然後就是每個數字後跟著的單位描述,個位是圓,十位是拾,百位是佰,那麼也是有一定順序關係的,得到單位描述的轉換列表,trans_list2

3:然後就可以試一試了。

# python

deffunc

(a):

trans_list1 =

[u'零'

, u'壹'

, u'貳'

, u'叄'

, u'肆'

, u'伍'

, u'陸'

, u'柒'

, u'捌'

, u'玖'

] trans_list2 =

[u'圓'

, u'拾'

, u'佰'

, u'仟'

, u'萬'

, u'拾'

, u'佰'

, u'仟'

]# enumerate(str(a))將數字按從左到右的順序和index對應起來

# 如1230對應為 (0,1)(1,2)(2,3)(4,0)

for index, str_n in

enumerate

(str

(a))

: result += trans_list1[

int(str_n)

]+ trans_list2[

len(

str(a))-

1-index]

return

(result)

while

true

: a =

int(

input()

)print

(func(a)

)

發現輸出的結果中對於幾種特殊情況的處理還有點問題:

1:對於數字為0的處理,0的位置上會生成零圓,零佰,零仟這時候是有問題的,如100 1001會生成壹佰零拾零萬 壹仟零佰零拾壹圓我們想要的是壹佰萬 壹仟零壹圓,多觀察幾個類似帶零的數字,思考過後,需要把數字為零的單位去掉,如零佰需要把佰去掉,且零被夾在中間時如101 1001是需要保留乙個零的,那麼得到第三個轉換列表。

replace_list =

[(u'零拾'

, u'零'),

(u'零佰'

, u'零'),

(u'零仟'

, u'零'),

(u'零零零'

,u'零'),

(u'零零'

,'零'),

(u'零萬'

, u'萬'),

(u'零圓'

, u'圓'

)]```

零萬和零圓不替換為零這是因為即使為零,萬這個單位和圓這個單位都是必要的。

順序也是有說法的,(u』零萬』, u』萬』), (u』零圓』, u』圓』)需要擺在最後面,因為100 1000這種情況擺在前面會變成壹佰零萬 柒仟零圓這樣子的話總會保留乙個零下來,所以放到最後把這種情況的零消除掉。

2:對負數的處理,邏輯內暫時是沒有的

(result, a) = (u'負', abs(a)) if a < 0 else ('', a)
如果是非負數就返回它本身並初始化result為空字元』』,如果是負數就返回它的絕對值,並把result初始化為』負』。

3:對於金額0的處理

return (u'零圓' if a==0 else result)
在結果最後,如果是數字0直接返回』零元』,否則返回轉換生成的結果(否則數字0自動生成的結果為』圓』,不符合題目要求)。

綜上所述,下面給出完整的**邏輯。

# python

deffunc

(a):

trans_list1 =

[u'零'

, u'壹'

, u'貳'

, u'叄'

, u'肆'

, u'伍'

, u'陸'

, u'柒'

, u'捌'

, u'玖'

] trans_list2 =

[u'圓'

, u'拾'

, u'佰'

, u'仟'

, u'萬'

, u'拾'

, u'佰'

, u'仟'

] replace_list =

[(u'零拾'

, u'零'),

(u'零佰'

, u'零'),

(u'零仟'

, u'零'),

(u'零零零'

,u'零'),

(u'零零'

,'零'),

(u'零萬'

, u'萬'),

(u'零圓'

, u'圓')]

(result, a)

=(u'負'

,abs

(a))

if a <

0else(''

, a)

for index, str_n in

enumerate

(str

(a))

: result += trans_list1[

int(str_n)

]+ trans_list2[

len(

str(a))-

1-index]

for k,v in replace_list:

result = result.replace(k, v)

return

(u'零圓'

if a==

0else result)

while

true

: a =

int(

input()

)print

(func(a)

)

人民幣 小寫金額轉換為大寫金額

標籤 空格分隔 人民幣 小寫金額轉換為大寫金額 jsp div class form group 合計人民幣金額 小寫 js 將輸入的小寫金額 轉換成大寫金額 function arabiatochinese num strunit strunit.substr strunit.length num...

人民幣數字金額轉大寫金額

public class t if money.substring index,money.length length 3 money money.replaceall d 去除 int length money.length 貨幣大寫形式 string bigletter 貨幣單位 string ...

人民幣小寫金額轉換為大寫函式

程式 function money thenumber dim money,i,string1,string2,length,checkp 定義變數 dim one onestr 定義陣列 string1 零壹貳叄肆伍陸柒捌玖 string2 萬仟佰拾億仟佰拾萬仟佰拾元角分釐毫 checkp ins...