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)

(按照最大公约数和最小公倍数所满足的条件进行计算就可以了)