2016-05-02 12 views
8

Ich war ein Problem scala und meine Lösung mit der Lösung ist:Scala Lösung für aufeinanderfolgende Produkte

object ConsecutiveProduct extends App { 

def getConsecutiveProduct(group: Int, number: String): Int = { 
    val result = number.sliding(group).map(product) 

    result.max 
} 

def product(number: String): Int = number.map(_.asDigit).product 

val str = """73167176531330624919225119674426574742355349194934 
      |96983520312774506326239578318016984801869478851843 
      |85861560789112949495459501737958331952853208805511 
      |12540698747158523863050715693290963295227443043557 
      |66896648950445244523161731856403098711121722383113 
      |62229893423380308135336276614282806444486645238749 
      |30358907296290491560440772390713810515859307960866 
      |70172427121883998797908792274921901699720888093776 
      |65727333001053367881220235421809751254540594752243 
      |52584907711670556013604839586446706324415722155397 
      |53697817977846174064955149290862569321978468622482 
      |83972241375657056057490261407972968652414535100474 
      |82166370484403199890008895243450658541227588666881 
      |16427171479924442928230863465674813919123162824586 
      |17866458359124566529476545682848912883142607690042 
      |24219022671055626321111109370544217506941658960408 
      |07198403850962455444362981230987879927244284909188 
      |84580156166097919133875499200524063689912560717606 
      |05886116467109405077541002256983155200055935729725 
      |71636269561882670428252483600823257530420752963450""".filter(_.isDigit) 
     println(getConsecutiveProduct(5, str)) 
}  

So nach Problem einer höchstes benachbartes Ziffern Produkt zu berechnen hat, für die Eingabe von 5 benachbarten Ziffern, die höchste Produkt Ich habe das Ergebnis richtig als 40824, aber nach Problem, wenn ich 13 hier println(getConsecutiveProduct(13, str)) übergeben, dh das höchste Produkt von aufeinander folgenden 13 Ziffern bekomme ich das Ergebnis als '2091059712', aber es ist nicht die richtige Antwort, wie ich in der jeweiligen Website eingeben wollte, Ich habe versucht, zu debuggen, kann aber nicht finden, wo ich falsch liege, jemand hilft bitte.

+0

Sie könnten die 'stripMargin' Methode auf Zeichenfolge, anstatt einen Filter verwenden möchten. –

+0

ja, werde es tun – Aamir

Antwort

5

Das gesuchte Produkt überschreitet eine 32-Bit-Ganzzahl, daher gibt es einen Überlauf. Verwenden Sie stattdessen . Dazu gehört auch das Ergebnis der asDigit auch, d.h .:

number.map(_.asDigit.toLong).product 
+0

vielen Dank, es hat funktioniert ... – Aamir

Verwandte Themen