Giải pháp HackerRank siêu chữ số JavaScript

Bạn hoàn toàn đúng. -) Nó được gọi là "hàm đệ quy" và có thể RẤT hữu ích hoặc RẤT tệ tùy thuộc vào cách sử dụng

Chìa khóa làm cho công việc này hoạt động là “điều kiện kết thúc”

if n < 10:
        return n

Nếu bạn không gọi điều này, mã của bạn sẽ lặp đi lặp lại mãi mãi và tự gọi nó là QUÁ, QUÁ và QUÁ lần nữa…

Một cái gì đó như thế này…

6+(7+(9+(0+(1+(0+(0+(0+(0+(.... Infinity )))))))))))))))

rất rất xấu xí

Hãy thử nó ở đây để xem ý tôi là gì.

Lỗi. Quá nhiều đệ quy có nghĩa là chức năng này đã tự gọi chính nó 5000 lần theo đúng nghĩa đen và quyết định “vặn cái này đi, cái này sẽ tồn tại mãi mãi. Tôi nghỉ việc”

Nếu bạn định gọi cùng một chức năng trong chính nó, hãy đảm bảo rằng bạn hoàn toàn có thể đảm bảo rằng có một điều kiện kết thúc hoặc bạn đang ở trong một thế giới bị tổn thương

NHƯNG…. nếu bạn kết thúc nó…

Vì vậy, nếu nó trừ đi một chữ số mỗi lần, bộ xử lý THỰC SỰ thấy nó như thế này…

chữ số_tổng = (6 +( 7 + ( 9 + ( 0 + ( 1 )))))

10976 % 10 = 6 + 1097 % 10 = 7 + 109 % 10 = 9 + 10 % 0 = 0 + 1 (Một chữ số nhỏ hơn 10 nên hàm ngừng gọi lại) Bằng 23

Giả sử, chúng ta được yêu cầu tạo một hàm nhận vào một số và tìm tổng các chữ số của nó một cách đệ quy cho đến khi tổng là một số có một chữ số

Ví dụ -

findSum(12345) = 1+2+3+4+5 = 15 = 1+5 = 6

Vì vậy, đầu ra phải là 6

Hãy viết mã cho hàm findSum() này −

Thí dụ

// using recursion
const findSum = (num) => {
   if(num < 10){
      return num;
   }
   const lastDigit = num % 10;
   const remainingNum = Math.floor(num / 10);
   return findSum(lastDigit + findSum(remainingNum));
}
console.log(findSum(2568));

Chúng tôi kiểm tra xem số đó có nhỏ hơn 10 hay không, nó đã được rút gọn chưa và chúng tôi nên trả lại số đó và từ hàm nếu không, chúng tôi nên trả lại lệnh gọi cho hàm đệ quy lấy chữ số cuối cùng từ số thêm vào cho đến khi nó nhỏ hơn 10

Hackerrank – Báo cáo sự cố

Có thể tìm thấy mô tả về sự cố trên Hackerrank

Giải pháp

Tạo một hàm đệ quy với điều kiện được mô tả - xem triển khai

Tôi đã tạo ra giải pháp trong

Tất cả các giải pháp cũng có sẵn trên GitHub của tôi

Scala

Giải pháp Scala

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

nhập scala. io. Nguồn

 

đối tượng SuperDigit mở rộng Ứng dụng {

  val dòng = Nguồn.stdin. bufferedReader(). readLine()

  val nk = dòng.tách(" ")

  val n = nk(0)

  val k = nk(1).toInt

 

  println(superDigit(n, k))

 

  def superDigit(num: Chuỗi, k. Int). Chuỗi = {

    nếu(num. độ dài == 1) {

      return num

    } else {

      val sum. BigInt = num. foldLeft(BigInt(0 . ))(_ + Character.chữ số(_, 10)) * k

      return superDigit(sum.toString, 1)

    }

  }

}

Làm cách nào để tìm siêu chữ số trong JavaScript?

số var = 5678572322398989898991; . chiều dài > 1) { var temp = 0; . chiều dài; . nhật ký (tạm thời);

Số nguyên siêu chữ số là gì?

Số siêu chữ số của số có một chữ số là chính chữ số đó nhưng đối với số có nhiều chữ số, siêu chữ số là tổng của tất cả các chữ số lặp đi lặp lại cho đến khi tổng đó là số có một chữ số. Vì vậy, nếu đầu vào giống như n = 513682, thì đầu ra sẽ là 7 vì (5+1+3+6+8+2) = 25, (2 + 5) = 7.