Golang 模拟大数运算( 超出int64 )可表示范围

时间:2025-03-03 10:16:12
package main

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

func multi(str1,str2 string) (result string) {

	if len(str1) ==0 && len(str2) ==0 {
		result = "0"
		return
	}
	var index1 = len(str1) - 1
	var index2 = len(str2) - 1
	var left int

	for index1 >=0 && index2 >=0 {

		c1 := str1[index1] - '0'
		c2 := str2[index2] - '0'
		sum := int(c1) + int(c2) + left
		if sum >=10 {
			left = 1
		} else {
			left = 0
		}
		c3 := (sum % 10) + '0'
		//("c3__%c,result:%s\n",c3,result)
		result = ("%c%s",c3,result)
		//("result:",result,"\n")
		index1--
		index2--
	}

	for index1 >=0 {
		c1 := str1[index1]-'0'
		sum :=  int(c1) + left
		if sum >= 10 {
			left = 1
		} else {
			left = 0
		}
		c3 := (sum %10) + '0'
		result = ("%c%s",c3,result)
		index1--
	}

	for index2 >=0 {

		c1 := str2[index2] - '0'
		sum := int(c1) + left
		if sum >= 10 {
			left = 1
		} else {
			left = 0
		}
		c3 := (sum % 10) + '0'
		result = ("%c%s",c3,result)
		index2--
	}
	if left == 1 {
		("1%s",result)
	}
	return
}

func main() {
	reader:= ()
	result,_,err:= ()
	if err != nil {
		("ERROR OCCOR! ",err)
		return
	}
	strSlice := (string(result),"+")
	if len(strSlice) != 2 {
		("Please Input a+b!")
		return
	}
	strNumber1 := (strSlice[0])
	strNumber2 := (strSlice[1])
	(multi(strNumber1,strNumber2))

}