Задачи по JavaScript с решениями: найти все натуральные числа из промежутка от 1 до 200, у которых сумма цифр равна S
Программирование на языке JavaScript.
Задача: Найти все натуральные числа из промежутка от 1 до 200, у которых сумма цифр равна S.
Решение:
<!DOCTYPE> <html> <head> <title>Задачи по JavaScript</title> </head> <body> <script> function f_click() { var div1 = document.getElementById("1").value; var b_lines = document.getElementById('lines'); var x=div1.length; var r=0; var t=''; for( var i = 1; i <=200; ++i ) { for(var j = 0; j <i.toString().length ; ++j ){ r=r+parseInt(i.toString().charAt(j)); } if (r==parseInt(div1)){ t=t+' '+i;} r=0; } b_lines.innerHTML=t; } </script> Введите число S: <br /> <input id='1' name="login" type="text" size="25" maxlength="30" value="" /> <br /> <input type="button" name="enter" value="Расчет" onclick="f_click()" /> <div style="margin: 0 auto;width: 200px; font-size:25px" id="lines"></div> </body> </html>
Копируем выше описанный код в какой-нибудь текстовый редактор (лучше в Notepad++) и сохраняем файл в формате HTML.
Используемые функции и методы в коде:
document.getElementById(id) - возвращает элемент по заданному id для дальнейшей работы с ним.
.value - возвращает значение "value" элемента.
.length - длина массива, в данном случае длина строки.
.toString() - преобразование в строку.
parseInt() - преобразование в число.
.charAt(i) - обращение к символу строки по индексу i.
.innerHTML - получает, изменяет содержание элемента.
Идея:
Вводим наше число S (желательно простое число), нажимаем "Расчет" после чего срабатывает функция f_click(). В переменной div1 храним наше число S, а в x - его длину. В цикле for перебираем натуральные числа от 1 до 200. Во втором цикле for высчитываем сумму цифр каждого натурального числа, чтобы потом сравнить ее в цикле if с введенным ранее числом S. Найденные натуральные числа выводятся по центру документа в блоке div c с id="lines".
Все хорошо работает, но есть небольшое "Но". Код работает не со всеми числами S, только от 1 и до 19. И я, к сожалению, понятия не имею почему...