趋势科技笔试

趋势科技算法岗笔试

题目

计算两个超大正实数的和,超大正实数以字符串形式存储

// 计算两个超大非负数字字符串的和
def LongAdd(s1, s2):
    if len(s1) == 0 or len(s2) == 0:
        return 'ValueError'
    s1Left, s1Right = LeftRightLen(s1)
    s2Left, s2Right = LeftRightLen(s2)
    leftmax = max(s1Left, s2Left)
    rightmax = max(s1Right, s2Right)
    length = leftmax + rightmax + 1
    s3 = []
    car = 0

    if s1Left < s2Left:
        s1 = s1.rjust(len(s1) - s1Left + s2Left, '0')
    else:
        s2 = s2.rjust(len(s2) - s2Left + s1Left, '0')

    if s1Right < s2Right:
        s1 = s1.ljust(len(s1) - s1Right + s2Right, '0')
    else:
        s2 = s2.ljust(len(s2) - s2Right + s1Right, '0')

    for i in range(len(s1) - 1, -1, -1):
        if s1[i] != '.' and s2[i] != '.':
            sum, car = add(s1[i], s2[i], car)
            s3.append(str(sum))
        else:
            s3.append('.')
    s3 .reverse()
    s3 = ''.join(s3)
    return s3

def LeftRightLen(s):
    for j in range(len(s)):
        an = j
        if s[j] == '.':
            return an, len(s) - an
    return an+1, 0

def add(s1, s2, car):
    sum = ord(s1) + ord(s2) - 2 * ord('0') + car
    car = sum // 10
    sum = sum % 10
    return sum, car
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值