算法基础:大数求和问题
Posted liguangsunls
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法基础:大数求和问题相关的知识,希望对你有一定的参考价值。
大数求和:
给定两个很大的正整数A和B,位数在50至100之间。求C=A+B;
输入:
由于A和B非常大。从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在50至100之间。
输出:
以字符串形式,输出一行,表示A和B的和。
例子输入:
11111111111111111111111111111111111
22222222222222222222222222222222222
例子输出:
给定两个很大的正整数A和B,位数在50至100之间。求C=A+B;
输入:
由于A和B非常大。从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在50至100之间。
输出:
以字符串形式,输出一行,表示A和B的和。
例子输入:
11111111111111111111111111111111111
22222222222222222222222222222222222
例子输出:
33333333333333333333333333333333333
代码实现:
package huawei import ( "bytes" "fmt" "strconv" "strings" ) func Test2Base() { s := add("91111111111111111111111111111111111", "122222222222222222222222222222222222") fmt.Println(s) } func add(a string, b string) string { //位数较少的,高位补0 if len(a) < len(b) { a = strings.Repeat("0", len(b)-len(a)) + a } else if len(a) > len(b) { b = strings.Repeat("0", len(a)-len(b)) + b } strLen := len(a) //保存结果的数组,从低位到高位进行保存 nums := make([]uint8, strLen) //从低位到高位開始遍历a。b addOne := false for i := 0; i < strLen; i++ { num_a := a[strLen-i-1] - '0' num_b := b[strLen-i-1] - '0' sum := num_a + num_b if addOne { sum++ } if sum > 9 { //进位 sum -= 10 addOne = true } else { addOne = false } nums[i] = sum } result := convertToString(nums) //进位。最前面补1 if addOne { result = "1" + result } return result } func convertToString(nums []uint8) string { var b bytes.Buffer for i := len(nums) - 1; i >= 0; i-- { b.WriteString(strconv.Itoa(int(nums[i]))) } return b.String() }
以上是关于算法基础:大数求和问题的主要内容,如果未能解决你的问题,请参考以下文章