如何对Int的数字求和

时间:2016-07-12 10:55:23

标签: arrays swift integer

我有Int这样的

let num: Int = 123

现在我想将其拆分为1, 2, 3之类的数字,并将它们相加以获得6

你能帮帮我吗?

4 个答案:

答案 0 :(得分:5)

这是你怎么做的。

  1. 为总和定义变量s,最初设置为0.
  2. n定义为您的号码,最初设置为123。
  3. 计算n % 10以提取最后一位数字。 %是模数运算符。将其添加到s
  4. 使用整数运算:n = n / 10删除最后一位数。
  5. 如果n为零,则全部完成。否则回到(3)。

答案 1 :(得分:3)

鉴于此

let number = 123

你可以

let digitsSum = String(number)
    .characters
    .flatMap { Int(String($0)) }
    .reduce(0, combine: +)

它是如何工作的?

String(number)

第一条指令会将您的Int转换为String,所以现在我们有"123"

.characters

这提取了一个Characters数组,因此输出为["1", "2", "3"]

.flatMap { Int(String($0)) }

这会将Characters数组转换为Int数组,以便[1, 2, 3]

.reduce(0, combine: +)

最后,Int数组的每个元素都与+操作相结合。所以1 + 2 + 3。

答案 2 :(得分:1)

对数字

的字符表示的移位ASCII值求和

作为@appzYourLife:s solution的替代方案,您可以使用utf8的{​​{1}}属性直接访问您String表示形式中字符的ASCII值编号

String

由于您知道自己从一个给定的号码变为let number = 123 let foo = String(number) .utf8.map { Int($0) } .reduce(0) { $0 + $1 - 48 } ,因此我们确定String中的所有字符都可以使用{{1}进行表示,而不会丢失编码(实际上甚至是ASCII编码)。字符Stringutf8的ASCII值由("0",此处)数字"9"UInt8表示,因此{{1}的转变在上面的48操作中。

答案 3 :(得分:0)

您可以将数字转换为字符并枚举它:

let numbs = 123
let str = "\(numbs)"
let a = str.characters.reduce(0) {
    return $0 + Int("\($1)")! // Note this is an explicit unwrapped optional in production code you want to replace it with something more safety like if let
}
print("A: \(a)")