题解 | #大数加法#

大数加法

http://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

思路:分别用两个字符切片装两个字符串,从末尾开始进行计算,每次运算得到的结果用字符使用StringBuilder输出,注意:stringbuilder加入字符是尾插法,即每次的字符是加入到末尾的,所以结果需要逆序输出。

package main
import "strings"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 计算两个数之和
 * @param s string字符串 表示第一个整数
 * @param t string字符串 表示第二个整数
 * @return string字符串
*/
func solve(s string, t string) string {
	// write code here
	// write code here
	var bs, bt []int
    //分别用字符切片接收
	for _, i := range s {
		bs = append(bs, int(i))
	}
	for _, i := range t {
		bt = append(bt, int(i))
	}
    //两个字符切片的末位
	indexs := len(bs) - 1
	indext := len(bt) - 1
	var left int
	var result strings.Builder
    //循环条件:当两个切片都计算完毕,且最后一次计算没有进位,如果有进位还要计算一次
	for indexs >= 0 || indext >= 0 || left != 0 {
		var c1, c2 int
		if indexs >= 0 {
			c1 = bs[indexs] - '0'
		}
		if indext >= 0 {
			c2 = bt[indext] - '0'
		}
		sum := c1 + c2 + left
		if sum >= 10 {
			left = 1
		} else {
			left = 0
		}
        //每次计算的结果用字符表示
		c3 := (sum % 10) + '0'
        //用stringbuilder写入字符
		result.WriteByte(byte(c3))
		indexs--
		indext--
	}
	s2 := result.String()
	var res string
    //逆序输出
	for i := len(s2) - 1; i >= 0; i-- {
		res += string(s2[i])
	}
	return res
}
全部评论

相关推荐

鼗:四级有点难绷,感觉能拿国家励志奖学金,学习能力应该蛮强的,四级确实不重要,但是拿这个卡你可是很恶心啊
点赞 评论 收藏
分享
头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务