Python--ZOJ1205

ZOJ--1205

    这道题算是大数相加吧,不过是带字母的20进制数,若是纯粹的大数对于Python来说毫无压力,因为Python的长整形所能表示的范围仅与机器的内存大小有关。这道题目中字母部分要转换成数字才能运算,我用一个trans()函数将输入中的字母转换成相应的数字储存在列表中,再用add()函数执行相加的操作,两数相加一开始不用考虑进位的事情,先将他们对应相加,然后再统一执行进位的操作,满20则进1。部分说明在注释中,下面是代码:

<span style="font-family:SimSun;font-size:14px;">#2015-02-16
# -*- coding: utf-8 -*-

import sys

def trans(p):
    '转换函数'
    l = []
    for m in range(len(p)):
        if ord(p[m]) < ord('a'):
            l.append(int(p[m]))
        else:
            temp = ord(p[m]) - ord('a') + 10 #将字母部分转换成数字
            l.append(temp)
    return l
def add(p,q):
    '相加函数'
    x = trans(p)
    y = trans(q) 
    if len(x)>len(y):
        length = len(x)
    else:
        length = len(y)
    for i in range(length):  #对应相加
        if i<len(x) and i <len(y):
            z.insert(0,x[len(x)-i-1]+y[len(y)-i-1])
        elif i <len(x):
            z.insert(0,x[len(x)-i-1])
        elif i <len(y):
            z.insert(0,y[len(y)-i-1])
    for i in range(len(z)-1,0,-1):  #满20进1
        if z[i] > 19:
            z[i-1] += z[i]/20
            z[i] = z[i]%20
    while z[0] > 19:
        z.insert(0, z[0]/20)
        z[1] = z[1]%20

if __name__ == '__main__':
    output = [0,1,2,3,4,5,6,7,8,9,'a','b','c'
                      ,'d','e','f','g','h','i','j']  #列表若太长是可以分行的
    while True:
        try:
            z = []
            p = raw_input()
            q = raw_input()
            add(p,q)
            for i in z:
                print output[i],
                sys.stdout.softspace = 0
            print '\n',
            sys.stdout.softspace = 0
        except EOFError:
            exit(0)
            break</span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值