swift 我怎样才能找到有多少有用的数字是在任何给定的数N?

tmb3ates  于 2023-05-21  发布在  Swift
关注(0)|答案(5)|浏览(112)

如果数字可被该数字整除,则数字中的数字是有用的。
这是我的:

func selfDivide(integer: Int) -> Int {
    var numString = String(integer)
    for character in numString.characters {
        if character % numString == 0 {
            return character
        }
    }
}

我想我必须找到一种方法,在字符串和字符之间使用%。
我得到的错误是:
二进制运算符“%”不能应用于“Character”和“String”类型的字符

htzpubme

htzpubme1#

以下是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)
gc0ot86w

gc0ot86w2#

我建议使用Int完成所有工作,而不是转换为String。您可以使用% 10获取数字,使用/ 10删除最后一位数字。

func selfDivide(number: Int) -> Int {
    var num = number
    var count = 0
    while num != 0 {
        let digit = abs(num % 10)
        if digit != 0 && number % digit == 0 {
            count += 1
        }
        num = num / 10
    }
    return count
}

extensionInt提供的答案相同:

extension Int {
    var usefulDigits: Int {
        var num = self
        var count = 0
        while num != 0 {
            let digit = abs(num % 10)
            if digit != 0 && self % digit == 0 {
                count += 1
            }
            num = num / 10
        }
        return count
    }
}

示例:

print(100.usefulDigits)      // 1
print(123.usefulDigits)      // 2
print(222.usefulDigits)      // 3
print(299.usefulDigits)      // 0
print(Int.max.usefulDigits)  // 4
print(Int.min.usefulDigits)  // 7
ubof19bj

ubof19bj3#

在while循环的一次迭代中,函数将计算出number的最后一个数字,并检查number的最后一个数字是否等于0,以及该数字是否可被该数字整除,如果结果为真,则计数递增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
    }

}
9fkzdhlc

9fkzdhlc4#

这对我来说只对无符号整数有意义。

  • 请让我知道,如果你有进一步的意义来敲我;我倾向于需要它 *
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
  }
}
vfwfrxfs

vfwfrxfs5#

在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
  }
}

相关问题