55/300
字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 示例 1: 输入: num1 = “2”, num2 = “3” 输出: “6” 示例 2: 输入: num1 = “123”, num2 = “456” 输出: “56088” 说明: num1 和 num2 的长度小于110。 num1 和 num2 只包含数字 0-9。 num1 和 num2 均不以零开头,除非是数字 0 本身。 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。非常以及十分想用str(int(num1)*int(num2)),多么强大的方法啊,然鹅,“不能直接将输入转换为整数来处理”。
哭泣,只会ascii,所以就按digit来吧。 思路:用代码实现手算乘法的过程。上面一个数,下面一个数。下面数的个位✖️上面数的个位,下面数的个位✖️上面数的十位…,然后下面数的十位再来一遍,以此类推,等于两个for loop。最后加一起(每次都有进位,代码里就是在后面补零)
class Solution: def multiply(self, num1: str, num2: str) -> str: res = 0 #下面数 for idx1, n1 in enumerate(num1[::-1]): n1 = ord(n1) - ord('0') #上面数 for idx2, n2 in enumerate(num2[::-1]): n2 = ord(n2) - ord('0') res += (n1 * n2)*(10**(idx1+idx2)) #10**0个位,10**1十位,10**2百位... return str(res)