From 5e09bbb63e81e372e3af61948fc505dcb90b480f Mon Sep 17 00:00:00 2001 From: Gleb Koval Date: Sun, 7 Nov 2021 20:58:43 +0000 Subject: [PATCH] multiply-strings --- multiply-strings/sol.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 multiply-strings/sol.go diff --git a/multiply-strings/sol.go b/multiply-strings/sol.go new file mode 100644 index 0000000..b221a9c --- /dev/null +++ b/multiply-strings/sol.go @@ -0,0 +1,36 @@ +package main + +// idk complexity +func multiply(num1 string, num2 string) string { + l1, l2 := len(num1), len(num2) + to_sum := make(map[int]int) + max_p10 := 0 + for p1 := l1 - 1; p1 >= 0; p1-- { + for p2 := l2 - 1; p2 >= 0; p2-- { + n1, n2 := int(num1[p1])-48, int(num2[p2])-48 + p10 := l1 - 1 - p1 + l2 - 1 - p2 + d := n1 * n2 + if p10 > max_p10 { + max_p10 = p10 + } + to_sum[p10] = to_sum[p10] + d + } + } + sum := "" + for p := 0; p <= max_p10; p++ { + d := to_sum[p] + sum = string(48+(d%10)) + sum + to_sum[p+1] = to_sum[p+1] + d/10 + if p+1 > max_p10 && d/10 > 0 { + max_p10 = p + 1 + } + } + for len(sum) > 1 && sum[0] == '0' { + sum = sum[1:] + } + return sum +} + +func main() { + println(multiply("123456", "0")) +}