计算两个大数相加的和,这两个大数会超过int64的表示范围

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func multi(a, b string) {
    var baselen int = 0
    var maxstr []byte
    var sum []int
    var left int = 0
    str1 := []byte(a)
    str2 := []byte(b)
    lens1 := len(a)
    lens2 := len(b)

    if lens1 >= lens2 {
        baselen = lens2
        maxstr = str1
    } else {
        baselen = lens1
        maxstr = str2
    }

    for i := 0; i < baselen; i++ {
        tmp1 := str1[lens1-i-1] - '0'
        tmp2 := str2[lens2-i-1] - '0'
        tmp := int(tmp1) + int(tmp2) + left
        if tmp >= 10 {
            left = 1
        } else {
            left = 0
        }
        tmp = tmp % 10
        sum = append(sum, tmp)
    }

    for i := baselen; i < len(maxstr); i++ {
        tmp := maxstr[len(maxstr)-i-1] - '0'
        sum = append(sum, int(tmp)+left)
        left = 0
    }

    var result string
    for i := 0; i < len(sum); i++ {
        tmp := strconv.Itoa(sum[len(sum)-i-1])
        result = result + tmp
     }

    if left == 1 {
         fmt.Println(strconv.Itoa(left) + result)
    } else {
        fmt.Println(result)
    }
}

func main() {
    reader := bufio.NewReader(os.Stdin)
    val, _, err := reader.ReadLine()
    if err != nil {
        fmt.Println("输入格式有问题  应该是 a+b")
        return
    }
    result := strings.Split(string(val), "+")
    if len(result) != 2 {
        fmt.Println("输入格式有问题  应该是 a+b")
        return
    }
    multi(strings.Trim(result[0], " "), strings.Trim(result[1], " "))
}

你可能感兴趣的:(计算两个大数相加的和,这两个大数会超过int64的表示范围)