- vừa được xem lúc

Phỏng vấn Javascript - Tính tổng của một chữ số

0 0 16

Người đăng: Hàn Lập Đạo tổ

Theo Viblo Asia

Series các bài viết ngắn chia sẻ Tips Javascript giúp code nhanh và kiến thức phỏng vấn Javascript.

Câu hỏi

Cho một số n lớn hơn 0, tính tổng của các chữ số n. Nếu tổng của số n có nhiều hơn một chữ số, tiếp tục tính tổng của kết quả đó cho tới khi kết quả quả chỉ còn một số. Ví dụ:

 16 --> 1 + 6 = 7 942 --> 9 + 4 + 2 = 15 --> 1 + 5 = 6
132189 --> 1 + 3 + 2 + 1 + 8 + 9 = 24 --> 2 + 4 = 6

Giải pháp

Để giải đề này bước đầu tiên ta cần phương pháp tách một số lớn thành ra từng số đơn vị và cộng chúng lại với nhau, ví dụ với số 942 ta cần tách nó thành 9, 4, 2, ta sẽ làm thế nào?

Cách phổ biến để làm việc này là ta thực hiện chia lấy phần nguyên và chia lấy phần dư của 10:

942 % 10 = 2
942 / 10 = 94 94 % 10 = 4
94 / 10 = 9 9 % 10 = 9
9 / 10 = 0

Sau đó ta tổng hợp phần dư ta có được từng số đơn vị của một số lớn => 9, 4, 2. Trong javascript chia lấy phần dư ta dùng phép toán %, còn chia lấy phần nguyên thì ta sử dụng phép toán / và hàm Math.floor. Ví dụ: 942 / 10 = 94.2 => Math.floor(94.2) = 94.

Ta thực hiện viết hàm tách số theo từng bước như sau:

function extract(n) { let r = n % 10 console.log("Remainder: ", r) let i = Math.floor(n / 10) console.log("Integer: ", i)
} extract(942)
// Remainder: 2
// Integer: 94

Tiếp theo để hàm thực thi cho tới đơn vị cuối cùng thì ta cần sử dụng phương pháp đệ quy:

function extract(n) { if (n === 0) { return } let r = n % 10 console.log("---------") console.log("Remainder: ", r) let i = Math.floor(n / 10) console.log("Integer: ", i) extract(i)
} extract(942)
Remainder: 2
Integer: 94
---------
Remainder: 4
Integer: 9
---------
Remainder: 9
Integer: 0

Để tính tổng ta định nghĩa thêm cho hàm một argument thứ hai và truyền giá trị ban đầu cho nó là 0:

function extract(n, t) { if (n === 0) { return t; } let r = n % 10 let i = Math.floor(n / 10) t += r return extract(i, t)
} console.log(extract(942, 0)) // 15

Cuối cùng, để thực hiện việc kiểm tra kết quả của hàm extract có lớn hơn hai chữ số hay không để thực hiện tiếp công việc thì ta nên tách ra một hàm khác. Việc này giúp code dễ hiểu và dễ thực hiện hơn. Ta định nghĩa thêm một hàm gọi là digitalRoot:

function digitalRoot(n) { if (Math.floor(n / 10) === 0) { return n } n = extract(n, 0) return digitalRoot(n)
}

Ở hàm này ta kiểm tra nếu n lớn hai chữ số thì ta tiếp tục thực hiện tách số với hàm extract, ngược lại ta trả kết quả về.

Đáp án

function digitalRoot(n) { if (Math.floor(n / 10) === 0) { return n } n = extract(n, 0) return digitalRoot(n)
} function extract(n, t) { if (n === 0) { return t; } let r = n % 10 let i = Math.floor(n / 10) t += r return extract(i, t)
} digitalRoot(16) // 7
digitalRoot(942) // 6
digitalRoot(132189) // 6

Hi vọng kiến thức này hữu ích cho các bạn.

Frontend VN

Theo dõi FB hoặc Tiktok của Frontend VN để cập nhật kiến thức và tips về FE mỗi ngày 🥰.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Blog#173: Introduction to Advanced JavaScript Concepts - Advanced JavaScript Part 1

Hi, I'm Tuan, a Full-stack Web Developer from Tokyo . JavaScript is an essential language for web development, and learning advanced concepts can significantly improve your programming skills.

0 0 22

- vừa được xem lúc

Blog#174: 🤔Understanding Asynchronous JavaScript: 🔄Callbacks, 🤞Promises, and 🤝Async/Await

Hi, I'm Tuan, a Full-stack Web Developer from Tokyo . 1. Introduction to Asynchronous JavaScript. What is Asynchronous JavaScript.

0 0 28

- vừa được xem lúc

Blog#175: 🧐Mastering JavaScript's Execution Context and Closures🚀

Hi, I'm Tuan, a Full-stack Web Developer from Tokyo . 1. Understanding Execution Context. A Quick Overview.

0 0 25

- vừa được xem lúc

Blog#177: 🤔MAYBE YOU DON'T KNOW - 👌Using Node-Postgres in Node.js Express✨

Hi, I'm Tuan, a Full-stack Web Developer from Tokyo . In this article, we'll walk you through a step-by-step guide on using node-postgres with Node.

0 0 30

- vừa được xem lúc

Blog#176: 💪The Power of JavaScript Functional Programming🚀

. The main goal of this article is to help you improve your English level. I will use Simple English to introduce to you the concepts related to software development.

0 0 23

- vừa được xem lúc

[Javascript] Nâng cấp kỹ thuật tạo Tham số trong Hàm JS

1. Khái niệm.

0 0 22