func addStrings(num1 string, num2 string) string { m, n := len(num1), len(num2) n1, n2 := []rune(num1), []rune(num2) if m < n { m, n = n, m n1, n2 = n2, n1 } carry := '0' for i, j := m-1, n-1; 0 <= i; i, j = i-1, j-1 { var b rune if j < 0 { if carry == '0' { break } b = '0' } else { b = n2[j] } n1[i], carry = add(n1[i], b, carry) } if carry != '0' { return "1" + string(n1) } return string(n1) } func add(a, b, c rune) (rune, rune) { num := a + b + c - 144 // 3 * '0' return num%10 + '0', num/10 + '0' }