给定两个以字符串模式示意的非负整数 num1num2 ,返回 num1num2 的乘积,它们的乘积也示意为字符串模式

示例:

输出: num1 = "2", num2 = "3"输入:“6”

思路

依照平时计算乘法的形式:竖式乘法。
num1num2 的每一位都别离相乘,后果保留在数组中,而后把乘积相加。
然而在理论的计算中,能够进行优化,在计算每一位的乘积的时候,把上一位的进位也思考进去,这样代码更优雅一些。

要害局部

num1[i] * num2[j] 的后果,本位保留在 sumArr[i+j+1],进位保留在 sumArr[i+j], 当计算下一位的时候,把本位的积加上上一位的进位,就能算出以后的本位与进位。反复这一过程,直到两个字符串中每一位都曾经相乘过了,数组中保留的就是计算结果。

func multiply(num1 string, num2 string) string {    if num1 == "0" || num2 == "0" {        return "0"    }    sumArr := make([]int, len(num1) + len(num2))    for i := len(num2)-1; i >= 0; i -- {        n2 := int(num2[i] - '0')        for j := len(num1)-1; j >= 0; j -- {            n1 := int(num1[j] - '0')            sum := n2 * n1 + sumArr[i+j+1]            sumArr[i+j+1] = sum % 10            sumArr[i+j] += sum / 10        }    }    res := ""    for k, v := range sumArr {        if k == 0 && v == 0 {            continue        }        res += string(v + '0')    }    return res}
公众号:没有幻想的阿巧 后盾回复 "群聊",一起学习,一起提高