给出两个用字符串表示的数字,将两个数字的乘积作为字符串返回。
备注:数字可以无限大,且是非负数。
思路:按位区分求乘积,结果也是按位存储,也就是从最低位到最高位依次计算
package main
import (
"strings"
"strconv"
)
/**
*
* @param num1 string字符串
* @param num2 string字符串
* @return string字符串
*/
func multiply( num1 string , num2 string ) string {
// write code here
num1Slice := strings.Split(num1, "")
num2Slice := strings.Split(num2, "")
//从个位数字开始
length1 := len(num1Slice)
length2 := len(num2Slice)
if length1 == 1 && num1Slice[0] == "0" {
return "0"
}
if length2 == 1 && num2Slice[0] == "0" {
return "0"
}
flag := 0
res := ""
for i := 1; i <= length1+length2-1; i++ {
multi := 0
for j := 0; j <= length1-1 && j < i; j++ {
if length2-1-(i-j-1) < 0 {
continue
}
//j代表第一个数字个十百千位的第几位,求得另一个数字是第几位
number1, _ := strconv.Atoi(num1Slice[length1-1-j])
number2, _ := strconv.Atoi(num2Slice[length2-1-(i-j-1)])
multi += number1 * number2
}
multi += flag
flag = multi / 10
res = strconv.Itoa(multi%10) + res
}
if flag > 0 {
res = strconv.Itoa(flag) + res
}
return res
}