Палиндром


#43

Получилось вот так:

Код

var poly = 1221;
var ylop = 0;
var isPalindrome = false;

var s = poly;
while (ylop < poly) {
ylop = ylop + (s % 10);
if (ylop === poly) {
isPalindrome = true;
break;
}
s = Math.floor(s / 10);
ylop = ylop * 10;
}


#44

У меня получилось 2 решения - одно полностью завязанное на String, другое на String + математика:
1.
var poly = 1221;
var doString = poly.toString();
var ylop = “”;
var isPalindrome = false;

for (var i = 0; i < doString.length; i++) {
ylop = doString.charAt(i) + ylop;
}

if (Number(ylop) === poly) {
isPalindrome = true;
}

var poly = 1221;
var doString = poly.toString();
var ylop = “”;
var isPalindrome = false;

var residue = 0;
var subtr = poly;

for (var i = 0; i < doString.length; i++) {
residue = subtr % 10;
subtr = subtr - residue;
subtr = subtr / 10;
ylop = ylop + residue;
}

if (Number(ylop) == poly) {
isPalindrome = true;
}

Второй вариант не очень нравится, т.к. все ломается если число начинается с нуля


#45

если не использовать изящное решение через reverse, то вот он:

самый каеф
var poly = 1221;
var ylop = 0;
var isPalindrome = false;
for (var i = 1; poly / i >= 1; i *= 10) { // счетчик 1, 10, 100, 1000 и т.д. пока результат деления больше 1, значит мы не достигли лимита разрядности poly и повторяем итерацию
    ylop += Math.floor(poly / i) % 10; // math.floor обрезает число от остатка деления для захода на новую итерацию, а сам остаток вписываем в ylop
    ylop = ylop.toString();  // тут вписываем в строку подряд остаток от деления
} 
if (ylop == poly) { // используем нестрогое сравнение, т.к. ylop у нас сейчас строка
    isPalindrome = true;
}

#46
var poly = 1221;
var ylop = 0;
var isPalindrome = false;

var polyCheck = poly;

for (var i = 0; i <= String(poly).length; i++) {
  ylop += (poly % 10) * Math.pow(10,(String(poly).length - 1)); 
  poly = (poly - (poly % 10)) / 10;
}

ylop += poly;

if (ylop == polyCheck) {
 isPalindrome = true;
}