11彤恶、人民幣打印金額
題目:銀行在打印票據(jù)的時(shí)候,常常需要將阿拉伯?dāng)?shù)字表示的人民幣金額轉(zhuǎn)換為大寫(xiě)表示坦辟,現(xiàn)在請(qǐng)你來(lái)完成這樣一個(gè)程序刊侯。
在中文大寫(xiě)方式中,0到10以及100锉走、1000滨彻、10000被依次表示為: 零 壹 貳 叁 肆 伍 陸 柒 捌 玖 拾 佰 仟 萬(wàn)
以下的例子示范了阿拉伯?dāng)?shù)字到人民幣大寫(xiě)的轉(zhuǎn)換規(guī)則:
1 壹圓
11 壹拾壹圓
111 壹佰壹拾壹圓
101 壹佰零壹圓
-1000 負(fù)壹仟圓
1234567 壹佰貳拾叁萬(wàn)肆仟伍佰陸拾柒圓
現(xiàn)在給你一個(gè)整數(shù)a(|a|<100000000), 請(qǐng)你打印出人民幣大寫(xiě)表示.
例如:a=1
則輸出:壹圓
注意:請(qǐng)以Unicode的形式輸出答案藕届。提示:所有的中文字符,在代碼中直接使用其Unicode的形式即可滿足要求疮绷,中文的Unicode編碼可以通過(guò)如下方式獲得:u'壹'翰舌。
參考答案:
# 用字典來(lái)建立數(shù)字和漢字的對(duì)應(yīng)關(guān)系
d = {'0':'零','1':'壹','2':'貳','3':'叁','4':'肆','5':'伍',
'6':'陸','7':'柒','8':'捌','9':'玖'}
unit = {'1':'','2':'拾','3':'佰','4':'仟','5':'萬(wàn)'}
# 接受列表參數(shù),返回轉(zhuǎn)換后的中文大寫(xiě)金額字符串
def f(L):
s = []
n = 1
for i in L[::-1]: # 從后往前冬骚,逐個(gè)從字典中對(duì)應(yīng)成漢字
if i == '0':
s.append(d[i])
n = n + 1
else:
s.append(unit[str(n)])
s.append(d[i])
n = n + 1
s.reverse()
for i in s[::-1]: # 處理一下結(jié)尾多個(gè)零的問(wèn)題
if i == '零':
del s[-1]
else:
break
while s.count('零') > 1: # 處理一下中間有多個(gè)零的問(wèn)題
s.remove('零')
return s
# 接受一個(gè)數(shù)字椅贱,調(diào)用上面的函數(shù),返回中文大寫(xiě)金額
def rmb(x):
if x > 0:
L = list(str(x))
if len(L) <= 4:
l = f(L)
l.append('圓')
l = ''.join(l)
return l
else:
La = L[-4:] # 倒數(shù)第4至結(jié)束
Lb = L[:len(L) - 4]
La = f(La)
Lb = f(Lb)
La.append('圓')
Lb.append('萬(wàn)')
Lab = Lb + La
return ''.join(Lab)
elif x == 0:
return '零圓'
else:
Lc = list(rmb(abs(x)))
Lc.insert(0,'負(fù)') # 在最前面加上‘負(fù)’
rerurn ''.join(Lc)
b = rmb(1398462)
print(b)
輸出
壹佰叁拾玖萬(wàn)捌仟肆佰陸拾貳圓
12只冻、公約數(shù)個(gè)數(shù)
題目:給你兩個(gè)正整數(shù)a,b, 輸出它們公約數(shù)的個(gè)數(shù)庇麦。
例如:a = 24, b = 36
則輸出:6
參考答案:
a,b = 24,36
n = 0
for i in range(1,max(a,b)):
if a % i == 0 and b % i == 0:
n = n + 1
else:
n = n
print(n)
一行搞定:
a,b = 24,36
print(sum([1 if a % i == 0 and b % i == 0 else 0 for i in range(1, max(a,b))]))
13喜德、逆解最大公約數(shù)與最小公倍數(shù)
題目:我們經(jīng)常遇到的問(wèn)題是給你兩個(gè)數(shù)山橄,要你求最大公約數(shù)和最小公倍數(shù)。今天我們反其道而行之舍悯,給你兩個(gè)數(shù)a和b航棱,計(jì)算出它們分別是哪兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)。輸出這兩個(gè)數(shù)萌衬,小的在前饮醇,大的在后,以空格隔開(kāi)秕豫。若有多組解朴艰,輸出它們之和最小的那組。注:所給數(shù)據(jù)都有解混移,不用考慮無(wú)解的情況祠墅。
例如:a=3, b = 60
則輸出:12 15
參考答案:
來(lái)源于:https://blog.csdn.net/weixin_41980474/article/details/80230881
首先可以知道,這兩個(gè)數(shù)的取值范圍在[3,60]之間歌径。
import math
a,b = 3,60
c = min(a,b) # 最大公約數(shù)
d = max(a,b) # 最小公倍數(shù)
l = [] # 增加一個(gè)列表用于存放所有滿足條件的數(shù)組
for i in range(c,d+1):
for j in range(c,d+1):
if math.gcd(i,j) == c and i * j / c == d: # 遍歷所有在[3,60]內(nèi)組成的數(shù)組
l.append((i,j)) # 如果滿足條件毁嗦,將兩數(shù)打包為tuple添加l列表
l.sort(key = lambda x: x[0] + x[1]) # 使用兩數(shù)之和作為key對(duì)l中的元素進(jìn)行排序,默認(rèn)為升序回铛,因此排序后第一組數(shù)據(jù)為所求的
print(' '.join(map(str,l[0])))
輸出:
12 15