по сложному пути пошли. вам не нужно искать разрядность числа.
вам нужна просто 1 временная переменная и нестрогое сравнение, чтобы сравнить 2 числа).
var poly = 50205;
var ylop = ""; // изменим тут, ниже поймете зачем
var isPalindrome = false;
var temp = poly;
for (var i = 0; temp > 0; i++) { // i тут тупо счетчик, условие выхода, что число больше не сосчитать по разрядам (т.е. по итерациям цикла)
ylop += (temp % 10); // число + любая строка = строка
temp = parseInt(temp/10, 10); // parseInt тащем-та работает не просто как преобразователь к числу. если это число дробное, оно его еще и обрезает до целого вниз. Math.floor (округление) вы изучите в следующей главе.
console.log(`${i} итерация: temp = ${temp}, ylop = ${ylop} (${typeof(ylop)})`); // вы шаблоны не пройдете в курсах от академии, добавил, чтобы вам наглядно было что происходит на каждой итерации цикла, а заодно видели тип данных, не обязательная строка в общем-то
}
if (poly == ylop) { isPalindrome = true; } // почему не строгое? ну влом приводить к числу, нам же не важен тип данных =)
Помните, что прибавляя даже пустую строку вы меняете тип данных на строковый. а это как раз и надо, чтобы дописывать в конец строки остаток от деления на 10.
И заметьте, нет ничего такого, что вы не изучали.
вообще без доп. переменных
var poly = 50205;
var ylop = "";
var isPalindrome = false;
for (var i = poly; i > 0; i = parseInt(i/10, 10)) {
ylop += (i % 10);
console.log(`i = ${i}, ylop = ${ylop} (${typeof(ylop)})`);
}
if (poly == ylop) { isPalindrome = true; }
нечего сказать, круто)
Благодарю!
Мои решения пока прямолинейные, потому как начинающий, пока осваиваю основы, твой способ намного упрощённый в плане кода (нет лишних переменных, а сама суть поместилась в 2-х строчках). Я запомнил свои ошибки.
Объясните, пожалуйста, почему не происходит математического сложения чисел при действии ylop+= i % 10;, почему они записываются рядом, а не складываются?
Спасибо.
var poly = 1221;
var ylop = 0;
var isPalindrome = false;
var schetchik = 0;
for (var i = poly; i > 0; i /= 10) {
schetchik++;
ylop += i % 10;
console.log(`начало итерации №${schetchik} ylop=${ylop}`);
if (i >= 10) {
ylop *= 10;
}
i -= i % 10;
console.log(`конец итерации №${schetchik} ylop=${ylop}`);
}
if (poly === ylop) {
isPalindrome = true;
}
вставьте код в консоль и поймете, что все хорошо складывается
В конце пошли решения, встречаются ещё более менее понятные. А в начале почитаешь, команды в решениях с Math.floor с Math.pow, мы ещё это не проходили, для начинающего очень сложно понять, приходилось искать сайт шпаргалку, чтобы вычитывать что это за команды. Думаю что нужно бы в курсах в теории вначале с этими командами ознакомить всё таки и дать расшифровку, как в начале в знакомстве в html знакомили с каждым тегом.
Как то в первых главах было всё по полочкам, разъясняли каждую деталь, а в Javosript не так подробно объясняется.
При проверке на htmlAcademy почему-то isPalindrome=false при poly=5005…
Хотя сам считал на бумажке проходя каждый цикл - получается true. То есть в моем случае при выходе из цикла y=poly.
Также и в онлайн-компиляторе Javascript (https://playcode.io/online-javascript-editor), куда я вставил свой код, переменная isPalindrome=true при poly=5005 и ylop=5005.
Хотелось бы узнать почему в Академии тест не проходит с числом 5005?
у вас переменные неверно объявлены. ylop должно быть равно poly.
вообще предполагалось, что буферная переменная равная poly будет y, а в ylop вы будете записывать то, что будете в условии сравнивать.
также в условии не нужно писать else ветку, если вы описываете дефолтное состояние isPalindrome = false
Работала, только неправильно. Для непалиндромов и 5005. А надо для всех значений. Исправили тоже неправильно. Теперь вы потеряли исходную переменную и от фиаско вас держит только ссылка в буфере
Переменную y использую для хранения исходного значения переменной poly, .так как саму poly в цикле разбираю до 0. Как тогда сравнивать то что собралось в ylop с исходным числом?
Можете пояснить пожалуйста почему при каких-то значениях код не сработает? я проверял для нескольких в компиляторе - работает.
Спасибо.
абсолютно неправильное решение, просто обошли проверку. неправильно тут все от начала и до конца. работает с любыми проверками, где не палиндромы заканчиваются на единицу и палиндромы заканчиваются на не единицу. на палиндром они естественно не проверяются.
вопрос тот же, что и к предыдущему - где цикл?
Всем привет! Задание далось оооочень непросто. Прочитала ВСЕ, на текущий момент, варианты решения. Огромное всем спасибо, т.к. без вас я бы в принципе не поняла что нужно делать. Суммировав все, получился вот такой вариант:
var poly = 1771;
var ylop = 0;
var isPalindrome = false;
for (i = poly; i > 0; i = (i - i % 10) / 10) {
ylop = ylop * 10 + i % 10;
}
if (poly === ylop) {
isPalindrome = true;
} else {
isPalindrome = false;
}
console.log(isPalindrome);
Вариант рабочий, проверки прошел. Про безопасные числа оч интересно, спасибо @yshmatlay.
Буду рада критике/комментариям.