zoukankan      html  css  js  c++  java
  • 算法基础:大数求和问题

    大数求和:
    给定两个很大的正整数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()
    }
    


  • 相关阅读:
    srum.3
    进程调度
    Scrum 项目——1
    《构建之法》—第6-7章
    团队合作——2
    团队合作——1
    作业调度_3
    作业调度——实验2
    典型用户
    【软件工程】做汉堡包
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7221389.html
Copyright © 2011-2022 走看看