Số Harshad là những số chia hết chính xác cho tổng các chữ số của chúng, giống như số 126, nó hoàn toàn chia hết cho 1 + 2 + 6 =9.
-
Tất cả các số có một chữ số đều là số harshad.
-
Các số Harshad thường tồn tại trong các cụm liên tiếp như [1,2,3,4,5,6,7,8,9,10], [110,111,112], [1010, 1011, 1012].
Công việc của chúng ta là viết một hàm nhận Số làm đầu vào kiểm tra xem đó có phải là số harshadnumber hay không, nếu không thì trả về -1, ngược lại thì trả về độ dài của chuỗi liên tiếp của cụmharshad.
Ví dụ -
harshadNum(1014) = harshadNum(1015) = harshadNum(1016) = harshadNum(1017) = 4 harshadNum(1) = 10 harshadNum(12) = 1 harshadNum(23) = -1
Hãy chia vấn đề này thành hai chức năng chính,
-
isHarshad () → nhận vào một số num và trả về một boolean tùy thuộc vào việc số đó có phải là harshad hay không.
-
harshadNum () → hàm chính nhận số thực, thực hiện cuộc gọi đến isHarshad () tại các điểm khác nhau và trả về độ dài của chuỗi.
Mã hóa hàm isHarshad () -
const isHarshad = (num) => { let sum = 0, temp = num; while(temp){ sum += temp % 10; temp = Math.floor(temp/10); } return num % sum === 0; }
Hàm lặp lại khá đơn giản trả về boolean
Bây giờ, hãy mã hóa hàm harshadNum () -
const harshadNum = (number) => { //if the input is not harshad return -1 if(!isHarshad(number)){ return -1; } let streak = 1, prev = number-1, next = number+1; //check preceding streak while(isHarshad(prev) && prev > 0){ streak++; prev--; } //check succeeding streak while(isHarshad(next)){ streak++; next++; } return streak; }; console.log(harshadNum(1014));
Hiểu mã trên -
-
Kiểm tra xem đầu vào có phải là harshad hay không, nếu không, hãy dừng chức năng và trả về -1;
-
Chạy ngược một vòng lặp lại, một vòng tiến lên trong khi chúng tôi tiếp tục nhận được số harshadnumbers, đồng thời tiếp tục cập nhật chuỗi
-
Cuối cùng trả lại chuỗi
Sau đây là mã hoàn chỉnh -
Ví dụ
const isHarshad = (num) => { let sum = 0, temp = num; while(temp){ sum += temp % 10; temp = Math.floor(temp/10); } return num % sum === 0; } const harshadNum = (number) => { //if the input is not harshad return -1 if(!isHarshad(number)){ return -1; } let streak = 1, prev = number-1, next = number+1; //check preceding streak while(isHarshad(prev) && prev > 0){ streak++; prev--; } //check succeeding streak while(isHarshad(next)){ streak++; next++; } return streak; }; console.log(harshadNum(1014));
Đầu ra
Đầu ra cho mã này trong bảng điều khiển sẽ là -
4