题目描述
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例:
输入: num1 = "2", num2 = "3" 输出: "6" 输入: num1 = "123", num2 = "456" 输出: "56088"
//字符串相乘 //做加法 1234 * 567 func multiply(num1 string, num2 string) string { if num1 == "0" || num2 == "0" { return "0" } ans := "0" m, n := len(num1), len(num2) //遍历字符串num2 for i := n - 1; i >= 0; i-- { curr := "" //进位 add := 0 for j := n - 1; j > i; j-- { curr += "0" } //转换为整数 y := int(num2[i] - '0') //做乘法 for j := m - 1; j >= 0; j-- { //转换为整数 x := int(num1[j] - '0') product := x * y + add //itoa 整形转换为字符串 //curr 为对应的每一位数 curr = strconv.Itoa(product % 10) + curr add = product / 10 } //处理最后一个进位 for ; add != 0; add /= 10 { curr = strconv.Itoa(add % 10) + curr } ans = addStrings(ans, curr) } return ans } func addStrings(num1, num2 string) string { i, j := len(num1) - 1, len(num2) - 1 add := 0 ans := "" //add 也要判断 for ; i >= 0 || j >= 0 || add != 0; i, j = i - 1, j - 1 { x, y := 0, 0 if i >= 0 { x = int(num1[i] - '0') } if j >= 0 { y = int(num2[j] - '0') } result := x + y + add ans = strconv.Itoa(result % 10) + ans add = result / 10 } return ans } //做乘法 func multiply(num1 string, num2 string) string { if num1 == "0" || num2 == "0" { return "0" } m, n := len(num1), len(num2) ansArr := make([]int, m + n) for i := m - 1; i >= 0; i-- { x := int(num1[i]) - '0' for j := n - 1; j >= 0; j-- { y := int(num2[j] - '0') //相乘 ansArr[i + j + 1] += x * y } } for i := m + n - 1; i > 0; i-- { ansArr[i - 1] += ansArr[i] / 10 ansArr[i] %= 10 } //存储最终结果 ans := "" idx := 0 if ansArr[0] == 0 { idx = 1 } for ; idx < m + n; idx++ { //整形转换为字符串 ans += strconv.Itoa(ansArr[idx]) } return ans }
参考链接:https://leetcode-cn.com/problems/multiply-strings/solution/zi-fu-chuan-xiang-cheng-by-