我已经为此工作了2天。
这就是我所拥有的:
func selfDivide(integer: Int) -> Int {
var numString = String(integer)
for character in numString.characters {
if character % numString == 0 {
return character
}
}
}
我想我必须找到一种在字符串和字符之间使用%的方法。
我得到的错误是:
二元运营商'%'不能应用于类型'字符'和'字符串'
答案 0 :(得分:16)
以下是使用扩展程序的更多Swifty方式( Swift 4 + ):
public extension Int {
/// returns number of digits in Int number
public var digitCount: Int {
get {
return numberOfDigits(in: self)
}
}
/// returns number of useful digits in Int number
public var usefulDigitCount: Int {
get {
var count = 0
for digitOrder in 0..<self.digitCount {
/// get each order digit from self
let digit = self % (Int(truncating: pow(10, digitOrder + 1) as NSDecimalNumber))
/ Int(truncating: pow(10, digitOrder) as NSDecimalNumber)
if isUseful(digit) { count += 1 }
}
return count
}
}
// private recursive method for counting digits
private func numberOfDigits(in number: Int) -> Int {
if number < 10 && number > 0 || number > -10 && number < 0 {
return 1
} else {
return 1 + numberOfDigits(in: number/10)
}
}
// returns true if digit is useful in respect to self
private func isUseful(_ digit: Int) -> Bool {
return (digit != 0) && (self % digit == 0)
}
}
用法:
print(333444.digitCount)
print(333444.usefulDigitCount)
答案 1 :(得分:4)
我建议您使用Int
完成所有工作,而不是转换为String
。您可以使用% 10
获取数字,使用/ 10
删除最后一位数。
func selfDivide(number: Int) -> Int {
var num = abs(number)
var count = 0
while num > 0 {
let digit = num % 10
if digit != 0 && number % digit == 0 {
count += 1
}
num = num / 10
}
return count
}
答案 2 :(得分:1)
在while循环的单次迭代中,该函数将计算出数字的最后一位,并检查数字的最后一位(如果不等于0)以及该数字是否可被该数字整除(如果结果为true,然后将计数加1。最后一行从数字中删除最后一位。重复相同的过程,直到数字大于0。最后,最后返回有效数字。
extension Int {
func usefulNumCount() -> Int {
var count = 0
var num = abs(self)
while num > 0 {
let remainder = num % 10
if remainder != 0 && self % remainder == 0 {
count += 1
}
num = num / 10
}
return count
}
}
答案 3 :(得分:0)
这对我来说只有无符号整数才有意义。
如果你有进一步的想法来敲我,请告诉我;我往往需要它。
public extension UnsignedInteger {
/// The digits that make up this number.
/// - Parameter radix: The base the result will use.
func digits(radix: Self = 10) -> [Self] {
sequence(state: self) { quotient in
guard quotient > 0
else { return nil }
let division = quotient.quotientAndRemainder(dividingBy: radix)
quotient = division.quotient
return division.remainder
}
.reversed()
}
func usefulDigitCount(radix: Self = 10) -> Int {
digits(radix: radix).filter(isMultiple).count
}
}
答案 4 :(得分:-1)
在 Swift 5 中
extension BinaryInteger {
var digits: [Int] {
return String(describing: self).compactMap { Int(String($0)) }
}
}
extension Int {
public var digitCount: Int {
get {
return self.digits.count
}
}
}
extension Int {
var usefulDigits: Int {
var count = 0
for digit in self.digits {
if digit != 0 && self % digit == 0 {
count += 1
}
}
return count
}
}