大数乘法 - Go语言实现

求两个不超过200位的非负整数的积 (规避数字溢出)
package main

import (
	"fmt"
	"strconv"
	)

func transaction(m map[int]int) {
	for i:=0;i<len(m);i++ {
		if m[i] >= 10 {
			m[i+1] = m[i+1] + m[i]/10
			m[i] = m[i]%10
		}else {
			continue
		}
	}
}

func print(m map[int]int) {
	for i:=len(m)-1;i>=0;i--{
		fmt.Print(m[i])
	}
}

func main() {
	n1 := "1221690876152618211222112425222333"
	n2 := "233229766122198827221111"
	result := map[int]int{}
	outc := 0
	inc := 0

	for i:=len(n1)-1;i>=0;i-- {
		out_num, _ := strconv.Atoi(string(n1[i]))
		for j:=len(n2)-1;j>=0;j-- {
			in_num, _ := strconv.Atoi(string(n2[j]))
			result[outc+inc] = result[outc+inc] + out_num * in_num
			inc++
		}
		inc = 0
		outc++
	}

	transaction(result)
	print(result)
}


#Go##笔试题目#
全部评论

相关推荐

点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务