Bit Integer Multiplication

一道很有参考意义的数学类题目,这个题里面用到的方法对于所有大数的加减乘除都有参考意义,一般情况下,一开始会想到去模拟数学里面的加减乘除那样逐个位进位这样的方法,但是这种方法并不适合在计算机上运行,我们可以先把逐个位的乘积保存在他们对应的位置上,然后最后再一次性将这些数加起来,因为a[i]和b[j]的乘积一定就保存在result[i+j]的位置上,因为这里字符串高位在前,所以需要注意一下对应的关系,最后还有一个前导零的问题和一个最后结果为0时的问题需要注意

class Solution:
    """
    @param: num1: a non-negative integers
    @param: num2: a non-negative integers
    @return: return product of num1 and num2
    """
    def multiply(self, num1, num2):
        # write your code here
        n, m = len(num1), len(num2)

        result = [0] * (n + m + 1)

        for i in xrange(n):
            for j in xrange(m):
                result[i + j] += (ord(num1[n - i - 1]) - ord('0')) * (ord(num2[m - j - 1]) - ord('0'))

        carry = 0
        for i in xrange(n + m + 1):
            carry, result[i] = divmod(result[i] + carry, 10)

        for i in xrange(n + m, -1, -1):
            if result[i]:
                result = result[:i + 1]
                return ''.join(map(str, result[::-1]))

        return '0'

results matching ""

    No results matching ""