11、人民币打印金额
题目:银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万
以下的例子示范了阿拉伯数字到人民币大写的转换规则:
1 壹圆
11 壹拾壹圆
111 壹佰壹拾壹圆
101 壹佰零壹圆
-1000 负壹仟圆
1234567 壹佰贰拾叁万肆仟伍佰陆拾柒圆
现在给你一个整数a(|a|<100000000), 请你打印出人民币大写表示.
例如:a=1
则输出:壹圆
注意:请以Unicode的形式输出答案。提示:所有的中文字符,在代码中直接使用其Unicode的形式即可满足要求,中文的Unicode编码可以通过如下方式获得:u'壹'。
参考答案:
# 用字典来建立数字和汉字的对应关系
d = {'0':'零','1':'壹','2':'贰','3':'叁','4':'肆','5':'伍',
'6':'陆','7':'柒','8':'捌','9':'玖'}
unit = {'1':'','2':'拾','3':'佰','4':'仟','5':'万'}
# 接受列表参数,返回转换后的中文大写金额字符串
def f(L):
s = []
n = 1
for i in L[::-1]: # 从后往前,逐个从字典中对应成汉字
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]: # 处理一下结尾多个零的问题
if i == '零':
del s[-1]
else:
break
while s.count('零') > 1: # 处理一下中间有多个零的问题
s.remove('零')
return s
# 接受一个数字,调用上面的函数,返回中文大写金额
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:] # 倒数第4至结束
Lb = L[:len(L) - 4]
La = f(La)
Lb = f(Lb)
La.append('圆')
Lb.append('万')
Lab = Lb + La
return ''.join(Lab)
elif x == 0:
return '零圆'
else:
Lc = list(rmb(abs(x)))
Lc.insert(0,'负') # 在最前面加上‘负’
rerurn ''.join(Lc)
b = rmb(1398462)
print(b)
输出
壹佰叁拾玖万捌仟肆佰陆拾贰圆
12、公约数个数
题目:给你两个正整数a,b, 输出它们公约数的个数。
例如: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、逆解最大公约数与最小公倍数
题目:我们经常遇到的问题是给你两个数,要你求最大公约数和最小公倍数。今天我们反其道而行之,给你两个数a和b,计算出它们分别是哪两个数的最大公约数和最小公倍数。输出这两个数,小的在前,大的在后,以空格隔开。若有多组解,输出它们之和最小的那组。注:所给数据都有解,不用考虑无解的情况。
例如:a=3, b = 60
则输出:12 15
参考答案:
来源于:https://blog.csdn.net/weixin_41980474/article/details/80230881
首先可以知道,这两个数的取值范围在[3,60]之间。
import math
a,b = 3,60
c = min(a,b) # 最大公约数
d = max(a,b) # 最小公倍数
l = [] # 增加一个列表用于存放所有满足条件的数组
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]内组成的数组
l.append((i,j)) # 如果满足条件,将两数打包为tuple添加l列表
l.sort(key = lambda x: x[0] + x[1]) # 使用两数之和作为key对l中的元素进行排序,默认为升序,因此排序后第一组数据为所求的
print(' '.join(map(str,l[0])))
输出:
12 15
网友评论