題目描述:
銀行在列印票據的時候,常常需要將阿拉伯數字表示的人民幣金額轉換為大寫表示,現在請你來完成這樣乙個程式。
在中文大寫方式中,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...