2016-05-19 10 views
-3

私はこれで2日間作業しています。ここで数字Nを指定すると、その数字の何桁の数字が有用であるかがわかります。数字がその桁で割り切れる場合は数字の数字が便利です

は私が持っているものです。

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

私はその文字列と文字の間で%を使用する方法を見つけなければならないと思っています。

私が手にエラーがある:

二項演算子「%」の型「文字」と「文字列」の文字に適用することはできません

+3

あなたの質問に代わりの画像を投稿したコードを入れてください。 – vacawama

+0

どうすればいいですか? –

+0

質問を編集します。コードを切り取り、あなたの質問に貼り付けてください。コードの上と下に空白行があることを確認します。コードは各行の前に最小4桁のスペースが必要です。右側の境界線にある場合は、すべてのコードを強調表示し、エディタの '{}'アイコンを押します。 – vacawama

答えて

8

は、拡張子(スウィフト3)を使用して、よりSwiftyの方法です:

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(pow(10, digitOrder + 1) as NSDecimalNumber)) 
        /Int(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 abs(number) < 10 { 
      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) 
+0

あなたは(in:)部分について詳述できますか?私は慣れていない! –

+0

あなたは正確に何を理解していませんでしたか? 'in'は単なる引数ラベルであり、' self'はInt型のオブジェクトです。 – nCod3d

+0

ああ、そうです。彼らはこれをスウィフト3でもっとやっていると思います。スウィフトを始めから学ぶ苦労... –

2

私は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 
} 
+0

これはうまくいかないようです...私のコンパイラを使用すると正解を返します。オンラインコンパイラでコードを実行して(正しい場合)、すべてのケースが失敗すると言います。 –

+0

と教師は彼が "修正して"そのように働くように言ったので、どういうことが間違っているのかは分かりません。 –

関連する問題