주어진 숫자에서 모든 숫자의 곱 찾기

덱스터 2305

스칼라에서는 주어진 숫자에서 모든 숫자의 곱을 찾는 방법을 작성해야합니다. 다음 스 니펫이 있습니다.

  def productDigits(number: Int): Int = {
    def helper(current: Int, accumulator: Int): Int = {
      current match {
        case current if current < 10 => accumulator * current
        case _ => helper(current / 10, accumulator * (current % 10))
      }
    }
    helper(number, 1)
  }

더 좋은 방법이 있습니까?

마리오 갈릭

다음은 OP의 재귀 솔루션과 Luis의 한 줄짜리 jmh 벤치 마크입니다.

실행 중

sbt "jmh:run -i 10 -wi 10 -f 2 -t 1 bench.So59652263"

어디

@State(Scope.Benchmark)
@BenchmarkMode(Array(Mode.Throughput))
class So59652263 {
  def _dexter2305(number: Int): Int = {
    def helper(current: Int, accumulator: Int): Int = {
      current match {
        case current if current < 10 => accumulator * current
        case _ => helper(current / 10, accumulator * (current % 10))
      }
    }
    helper(number, 1)
  }

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

  val num: Int = (math.random * 100000000).toInt
  @Benchmark def dexter2305: Int = _dexter2305(num)
  @Benchmark def luis: Int = _luis(num)
}

준다

[info] So59652263.dexter2305  thrpt   20  89093066.408 ± 1825286.801  ops/s
[info] So59652263.luis        thrpt   20  11585098.230 ±  272966.526  ops/s

재귀 솔루션은 한 줄의 처리량보다 7 배 더 많은 처리량을 갖는 것으로 보입니다.


때 벤치마킹 number입니다 String대신Int

@State(Scope.Benchmark)
@BenchmarkMode(Array(Mode.Throughput))
class So59652263 {
  def _dexter2305(number: String): Int = {
    def helper(current: Int, accumulator: Int): Int = {
      current match {
        case current if current < 10 => accumulator * current
        case _ => helper(current / 10, accumulator * (current % 10))
      }
    }
    helper(number.toInt, 1)
  }

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

  val num: String = (math.random * 100000000).toInt.toString
  @Benchmark def dexter2305: Int = _dexter2305(num)
  @Benchmark def luis: Int = _luis(num)
}

준다

[info] Benchmark               Mode  Cnt         Score         Error  Units
[info] So59652263.dexter2305  thrpt   20  36237007.844 ± 1631349.975  ops/s
[info] So59652263.luis        thrpt   20  13975984.042 ± 1890083.941  ops/s

우리는 재귀 솔루션을 볼 경우 여전히 때보 다 2.5의 작은 배 그러나 높은 처리량,이 number되었다 Int.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

주어진 숫자에서 모든 조합 얻기

분류에서Dev

주어진 숫자에 대해 두 숫자의 가능한 모든 조합 / 분할 찾기

분류에서Dev

.txt에서 숫자의 제곱 찾기

분류에서Dev

주어진 숫자의 합계 찾기

분류에서Dev

주어진 숫자 세트에서 가능한 모든 표현식 풀기

분류에서Dev

오류 : 주어진 숫자에서 가장 큰 숫자 찾기

분류에서Dev

[Leetcode] 448. 배열에서 사라진 모든 숫자 찾기

분류에서Dev

정렬되지 않은 숫자 배열에서 주어진 합계를 가진 모든 쌍을 찾습니다.

분류에서Dev

LMC에서 주어진 숫자의 모든 자릿수를 인쇄합니다.

분류에서Dev

주어진 한계에서 숫자 N 번째 거듭 제곱

분류에서Dev

주어진 모든 배열 크기에 대해 배열에 숫자 추가-Java

분류에서Dev

주어진 숫자에 합산되는 숫자의 하위 집합 찾기

분류에서Dev

C의 배열에서 주어진 숫자의 모든 발생 제거

분류에서Dev

숫자의 거듭 제곱 찾기

분류에서Dev

applescript에서 숫자의 제곱근을 어떻게 찾습니까?

분류에서Dev

배열에서 숫자의 모든 인덱스 찾기 (Java)

분류에서Dev

소인수에서 숫자의 모든 요인 찾기

분류에서Dev

주어진 숫자 세트에서 회문 시퀀스의 수 찾기

분류에서Dev

모든 숫자의 곱셈 (두 숫자 사이) python

분류에서Dev

R의 숫자 시퀀스에서 특정 길이를 가진 모든 하위 시퀀스 찾기

분류에서Dev

주어진 숫자 주변의 숫자 범위 얻기

분류에서Dev

함수의 인수로 주어진 4 개의 숫자에 대해 모든 숫자에 대해 결합 된 최대 주파수를 가진 숫자를 찾아야합니까?

분류에서Dev

주어진 숫자의 모든 파티션 인쇄

분류에서Dev

주어진 합계에 도달하기 위해 주어진 숫자의 가능한 모든 조합을 가져옵니다.

분류에서Dev

문제 : 숫자의 자릿수의 반복 제곱합이 1 인 범위 (1,1000)에서 숫자 찾기

분류에서Dev

주어진 길이를 가진 제곱합의 재귀 찾기 순서

분류에서Dev

사용할 주어진 숫자와 범위를 더한 모든 숫자를 찾습니다.

분류에서Dev

주어진 숫자를 더하는 배열의 숫자 찾기 c ++

분류에서Dev

주어진 숫자의 합계를 구하는 요소 찾기

Related 관련 기사

  1. 1

    주어진 숫자에서 모든 조합 얻기

  2. 2

    주어진 숫자에 대해 두 숫자의 가능한 모든 조합 / 분할 찾기

  3. 3

    .txt에서 숫자의 제곱 찾기

  4. 4

    주어진 숫자의 합계 찾기

  5. 5

    주어진 숫자 세트에서 가능한 모든 표현식 풀기

  6. 6

    오류 : 주어진 숫자에서 가장 큰 숫자 찾기

  7. 7

    [Leetcode] 448. 배열에서 사라진 모든 숫자 찾기

  8. 8

    정렬되지 않은 숫자 배열에서 주어진 합계를 가진 모든 쌍을 찾습니다.

  9. 9

    LMC에서 주어진 숫자의 모든 자릿수를 인쇄합니다.

  10. 10

    주어진 한계에서 숫자 N 번째 거듭 제곱

  11. 11

    주어진 모든 배열 크기에 대해 배열에 숫자 추가-Java

  12. 12

    주어진 숫자에 합산되는 숫자의 하위 집합 찾기

  13. 13

    C의 배열에서 주어진 숫자의 모든 발생 제거

  14. 14

    숫자의 거듭 제곱 찾기

  15. 15

    applescript에서 숫자의 제곱근을 어떻게 찾습니까?

  16. 16

    배열에서 숫자의 모든 인덱스 찾기 (Java)

  17. 17

    소인수에서 숫자의 모든 요인 찾기

  18. 18

    주어진 숫자 세트에서 회문 시퀀스의 수 찾기

  19. 19

    모든 숫자의 곱셈 (두 숫자 사이) python

  20. 20

    R의 숫자 시퀀스에서 특정 길이를 가진 모든 하위 시퀀스 찾기

  21. 21

    주어진 숫자 주변의 숫자 범위 얻기

  22. 22

    함수의 인수로 주어진 4 개의 숫자에 대해 모든 숫자에 대해 결합 된 최대 주파수를 가진 숫자를 찾아야합니까?

  23. 23

    주어진 숫자의 모든 파티션 인쇄

  24. 24

    주어진 합계에 도달하기 위해 주어진 숫자의 가능한 모든 조합을 가져옵니다.

  25. 25

    문제 : 숫자의 자릿수의 반복 제곱합이 1 인 범위 (1,1000)에서 숫자 찾기

  26. 26

    주어진 길이를 가진 제곱합의 재귀 찾기 순서

  27. 27

    사용할 주어진 숫자와 범위를 더한 모든 숫자를 찾습니다.

  28. 28

    주어진 숫자를 더하는 배열의 숫자 찾기 c ++

  29. 29

    주어진 숫자의 합계를 구하는 요소 찾기

뜨겁다태그

보관