12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package main
- import (
- "fmt"
- "strings"
- )
- func add(a, b string) string {
- // 反转字符串,方便从低位到高位计算
- a = reverse(a)
- b = reverse(b)
- // 把字符串转换为数组,方便运算
- aArr := strings.Split(a, "")
- bArr := strings.Split(b, "")
- // 判断谁的长度更长,确定循环次数
- n := len(aArr)
- if m := len(bArr); m > n {
- n = m
- }
- // 初始化结果字符数组,用于存储计算结果
- res := make([]string, n)
- // 进位标志
- carry := 0
- // 从低位到高位进行计算
- for i := 0; i < n; i++ {
- x := 0
- if i < len(aArr) {
- x = int(a[i] - '0')
- }
- y := 0
- if i < len(bArr) {
- y = int(b[i] - '0')
- }
- sum := x + y + carry
- res[i] = string(sum%10 + '0')
- carry = sum / 10
- }
- // 如果最高位有进位,则把进位加入结果字符数组的最前面
- if carry > 0 {
- res = append([]string{string(carry + '0')}, res...)
- }
- // 反转字符数组,得到最终结果
- return reverse(strings.Join(res, ""))
- }
- // 字符串反转函数
- func reverse(s string) string {
- runes := []rune(s)
- for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
- runes[i], runes[j] = runes[j], runes[i]
- }
- return string(runes)
- }
- func main() {
- fmt.Println(add("12345678901234567890", "98765432109876543210"))
- }
|