Прошу оценки "Палиндром"


#1

СТарался использовать только циклы и знания из курса, прошу оценить насколько усложнил себе жизнь , и оценить код в целом.

var poly = 12455421;
var ylop = 0;
var isPalindrome = false;
var quantity=0
var z
var p
var k
var m
var chislo = 0
var polnoe = 0
var chislo2=0
for (var i=0;i>=0;i++){
p = Math.trunc(poly / (Math.pow(10,i)));
if(p === 0){
break
}
else{
quantity=quantity+1;

}
}
console.log(‘kol-vo cifr’, quantity);
m=poly
for (var z=quantity,k=1;k<=quantity, z>=0;z–,k++){
if (z>0){
chislo = Math.trunc(poly/ (Math.pow(10,(z-1))))
poly=poly-chislo*(Math.pow(10,(z-1)))
chislo2 = chislo*Math.pow(10, k-1);
polnoe += chislo2
}
}
console.log(m)
console.log(polnoe)
if (m==polnoe) {isPalindrome=true}
else {isPalindrome=false}
console.log(isPalindrome)


#2

проще всего было склеить строку из остатков деления в цикле и потом нестрого сравнить с исходным числом (это из того, что знаете).


#3

Это просто “Война и Мир” какие-то. Я думал что я придумал самый длинный код используя только представленный материал курса, но ты меня явно переплюнул. Для наглядности делюсь своим:
var poly = 1567;
var ylop = 0;
var bet = poly;
var isPalindrome = false;

while(bet>0){
ylop*=10;
ylop=bet%10 + ylop;
bet=Math.floor(bet/10);
}
if(poly===ylop){
isPalindrome=true;
}
else{
isPalindrome;
}


#4

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

var a = poly % 10;
var b = a * 1000;

var c = Math.floor(poly / 10);
var d = c % 10;
var k = d * 100;

var e = Math.floor(poly / 100);
var f = e % 10;
var l = f * 10;

var j = Math.floor(poly / 1000);
var i = j % 10;

ylop = b + k + l + j;
if (poly == ylop) {isPalindrome = true
}


#5

Спасибо за лаконичное решение.

Помогло скорректировать свой код, хоть и проходит только две проверки.

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

var number=0;

while (poly>=1) {

   ylop+=Math.floor(poly%10)*Math.pow (10,number);//1+20+200+1000
   
   number++;
          
   poly=Math.floor(poly)/10;
   
   console.log (ylop);
               
 if (ylop===poly){
 
 isPalindrome = true;
 }
 }

#6

Хотелось бы понять, почему не проходит. Вывод на экран палиндрома правильный, при этом одна (первая) проверка на 7997 - false.

Почему?


#7

потому что ваш код неправильный.
сами подумайте, вы в ходе работы цикла изменяете poly, поэтому ylop априори не может быть равен poly (т.к. исходное значение переменной затерто).
нет смысла проверять на палиндром на каждой итерации, проверка должна быть вынесена за цикл.
во время работы цикла введите буферную переменную, которую и будете изменять вместо poly и потом сравните с эталоном (poly).
также, в ходе работы вашего цикла вы берете последнюю цифру (остаток от деления на 10) … и умножаете её на растущую степень 10 (а должны бы на уменьшающуюся степень, чтобы последний разряд вставал на первое место).
т.е. вы не переворачиваете число, а получаете его же, выходит любое число в принципе по смыслу было бы true на палиндром