Как и обещал, публикую свой вариант второй версии решения задачи. Заранее скажу, что в данном варианте нет запрещенных методов вроде:
-
Использование строк.
-
Использование/Создание каких либо переменных, отличных от имеющихся изначально.
-
Использование каких-либо математических функций (Math.*).
var poly = 1221;
var ylop = 0;
var isPalindrome = false;
for (var i = poly; i > 0; i = (i - (i % 10)) / 10) {
ylop += i % 10;
if (i - (i % 10) > 0) {
ylop *= 10;
}
}
if (ylop === poly) {
isPalindrome = true;
}
Что же здесь происходит? Объясню. Так как я посчитал заведение лишней переменной за нарушение правил решения задачи, я решил использовать только доступную для for(; переменную i. Так как любая операция с переменной poly будет менять её значение, я присвоил переменной i значение переменной poly.
Не забывайте, что переменная poly нам необходима в конце, для сравнения строк и определения, является ли число палиндромом, так что не меняйте содержимое переменной poly, а используйте копию poly, например i
В каждом проходе цикла for я уменьшаю значение переменной i таким образом, чтобы каждый раз убирался последний символ. Как мы знаем i % 10 вернет остаток от деления. Каждый раз, мы от предыдущего значения i вычитаем остаток от деления i на 10, и делим полученный результат на 10, чтобы убрать ноль в конце числа.
В то же время мы увеличиваем переменную ylop на это самое значение остатка от деления на 10 (т.е. последний символ). После увеличения проверяем, изначальное число больше ноля, при вычитании от него остатка от деления? Пример:
1234 // Каждый проход цикла будет делать i = (i - (i % 10)) / 10, т.е. (1234 - (1234 % 10)) / 10 = 123, каждый раз отсекая последнее число. В проверке if () мы сначала от 1234 отнимаем последний символ, но не делим число на 10, чтобы осталось 1230. Таким образом мы определяем как управлять переменной ylop, добавлять ей значение или добавлять разряд в виде ноля. Последовательность изменения переменной ylop:
0 // Начало
1 // Добавили последнюю цифру от 1221.
10 // Добавили разряд, так как понимаем что 1220 больше 10ти
12 // Добавили последнюю цифру от 122
120 // Добавили разряд, так как понимаем что 120 больше 10ти
122 // Добавили последнюю цифру от 12
1220 // Добавили разряд, так как понимаем что 12 больше 10ти
1221 // Добавили то что осталось, так как оно меньше 10