Python刷题
(以下代码是在PyCharm上运行成功的,如果想要在刷题上成功运行,需要把前边的定义去掉)
16.题目描述:
银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万
以下的例子示范了阿拉伯数字到人民币大写的转换规则:
1 壹圆
11 壹拾壹圆
111 壹佰壹拾壹圆
101 壹佰零壹圆
-1000 负壹仟圆
1234567 壹佰贰拾叁万肆仟伍佰陆拾柒圆
现在给你一个整数a(|a|<100000000), 请你打印出人民币大写表示.
'''方法二 一个main函数'''
u1 = [u'零', u'壹',u'贰',u'叁',u'肆',u'伍',u'陆',u'柒',u'捌',u'玖']
u2 = ['',u'拾',u'佰',u'仟',u'万',u'拾',u'佰',u'仟',u'万']
a = 10000
stra=''
if a<0:
a=abs(a)
c = -1
elif a > 0:
a = a
c = 1
elif a == 0:
c= 0
b = str(a)
l=len(b)
for i in range(l-1,-1,-1):
# print(b[i])
tem = ''
tem=u1[int(b[i])]+u2[l-i-1]
stra = tem +stra
stra = stra + '圆'
stra = stra.replace('零万','零').replace('零仟','零').replace('零佰','零').replace('零拾','零')
stra = stra.replace('零零零零','零').replace('零零零','零').replace('零零','零')
stra = stra.replace('零圆','圆')
if c > 0:
print(stra)
elif c==0:
print('零圆')
elif c < 0:
print('负'+stra)
(这个代码只要逻辑搞清楚还是比较容易的,就像单片机上数码管显示码字差不多吧,只不过这个需要两个列表一个表示数字一个表示单位,比较难处理的零万零仟零佰零拾以及多个零重叠的情况,不过知道replace可以直接替换字符串中的内容就也还比较好实现)
17.题目描述:
给你两个正整数a,b, 输出它们公约数的个数。
例如:a = 24, b = 36
则输出:6
a = 12
b = 12
num = 0
for i in range(1,min(a,b)+1):
if int(a%i) == 0 and int(b%i) == 0:
num = num +1
print(int(num))
(从1开始到小于两个数较小的那个数,不断地被a和b除,如果都可以整除,则就是公约数,输出公约数就加一)
18.题目描述:
我们经常遇到的问题是给你两个数,要你求最大公约数和最小公倍数。今天我们反其道而行之,给你两个数a和b,计算出它们分别是哪两个数的最大公约数和最小公倍数。输出这两个数,小的在前,大的在后,以空格隔开。若有多组解,输出它们之和最小的那组。注:所给数据都有解,不用考虑无解的情况
a = 3
b = 60
num1 = 0
num2 = 0
for i in range(min(a,b),max(a,b),1):
for j in range(max(a,b),min(a,b),-1):
if i%a ==0 and j%a == 0 and b%i == 0 and b%j == 0 and a*b == i*j and i<=j:
num1 = i
num2 = j
print(num1,num2)
(按照最大公约数和最小公倍数所满足的条件进行计算就可以了)