字符串方式求和
let n = max(a.count, b.count)
var carry = 0
var result: String = ""
for i in 0...n - 1 {
if i < a.count {
let aChar = a.getChar(index: a.count - 1 - i)
carry += aChar.isNumber ? aChar.wholeNumberValue! : 0
}
if i < b.count {
let bChar = b.getChar(index: b.count - 1 - i)
carry += bChar.isNumber ? bChar.wholeNumberValue! : 0
}
result.insert(contentsOf: String(carry % 2), at: result.startIndex)
carry /= 2
}
if carry > 0 {
result.insert(contentsOf: "1", at: result.startIndex)
}
return result
获取字符串中单个字符方法
extension String {
func getChar(index: Int) -> Character {
let indexObj = self.index(startIndex, offsetBy: index)
return self[indexObj]
}
}
数字形式求和(效率更高)
let a = a.compactMap { Int(String($0)) }
let b = b.compactMap { Int(String($0)) }
var res = [Int]()
var a_i = a.count - 1
var b_i = b.count - 1
var val = 0
var carry = 0
while a_i >= 0 || b_i >= 0 {
val = 0
if a_i >= 0 { val += a[a_i] }
if b_i >= 0 { val += b[b_i] }
val += carry
res.append(val % 2)
carry = val / 2
a_i -= 1
b_i -= 1
}
if carry != 0 { res.append(1) }
return res.reversed().map { String($0) }.joined()