题解 | #大数加法#
大数加法
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
}