Палиндром


#84

Только по циклам решал, без Math.floor

var poly = 444;
var ylop = 0;
var isPalindrome = false;
var number = poly;

while (poly >= 1) {
ylop = poly % 10 + ylop * 10;
if (Math.round(poly % 10) > 4) {
poly = Math.round(poly / 10) - 1;
} else {
poly = Math.round(poly / 10)
}
console.log(ylop);
}

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


#85

если не хотите Math.floor, следовало тогда использовать toFixed и операции производить над number
а то получается вы затерли переменную и сравниваете с копией.


#86

Почитала про строки. Если абстрагироваться от циклов, то toString, мне кажется, самый простой вариант:

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

poly = poly.toString();
ylop = poly.split('').reverse().join(''); 

if (poly === ylop) {
  isPalindrome = true;
} else {
  isPalindrome = false;
  }

console.log(isPalindrome);

В общем, из комментов оч много интересного можно почерпнуть))).


#87

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

var ylop1 = ‘’
for (var i = 0; i < poly; i++){
var p = poly % 10;
poly = Math.trunc(poly / 10)
ylop1 += p

}
ylop = parseInt(ylop1, 10);
console.log(ylop)
if (poly === ylop){isPalindrome = true}
console.log (isPalindrome)

Не могу понять в чём ошибка, числа равны, условие соблюдается, а выдаёт всё равно false
P.S. Нашёл ошибку, но сообщение решил оставить, мало ли кому потом поможет…

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

var x = poly
var ylop1 = ‘’
for (var i = 0; i < x; i++){
var p = x % 10;
x = Math.trunc(x / 10)
ylop1 += p
}
if(x!=0){
ylop = ylop1 + x}
else {ylop = ylop1}
console.log(ylop)
if (poly == ylop){isPalindrome = true}
console.log (isPalindrome)


#88

Предложу свой вариант. Тоже поломал голову, не хотелось использовать массивы, которые здесь просто напрашиваются. Исходил из того, что:

  1. .toString() - о нём уже рассказывалось в главе “Условия”
  2. Math.floor - уже достаточно много говорилось об этих функциях, и округлении, и квадратном корне, посчитал, что это подсказка - поискать, как округлить вниз.
  3. Подсказка в задании корявая, особенно когда начинают делить на 10 и получают целое число. Но это ещё ладно. А вот как собирать число - даже не стал вникать.
  4. С учётом % получается очень удачно: получаем последнюю цифру числа, плюсуем её в пустую строку (она становится первой), затем предпоследнюю - и делаем конкатенацию, она становится второй и т.д. - в итоге собирается инвертированное число.

var poly = 456;
var number = poly;
var ylop = ‘’;
var isPalindrome = false;

while(number > 0) {
var digit = (number % 10).toString();
ylop += digit;
number = Math.floor(number / 10);
}

if(ylop === poly.toString()) {
isPalindrome = true;
}

P.S. Вставить форматированный код не получается, здесь всегда как-то по-дебильному работало форматирование, давно не был на этом форуме, уже забыл, как этого добиться


#89

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

тут хватит и нестрогого сравнения


#90

Да, не заметил. За видео по форматированию - спасибо. Думал, что можно сначала нажать, а потом вставить код в выделенную область.


#91

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

var count = 1;
var help = 1;
var number = poly;
var number1 = 0;
var number2 = 0;
var number3 = poly;
while(number>10){
count++;
number/=10;
}

for(var i = 1;i<count;i++){
help*=10;
}
while(help>0){
number1 = (number3%10)*help;
number3 = ~~(number3/10);
help/=10;
ylop+=number1;
}

if(poly===ylop){
isPalindrome = true;
}else{
isPalindrome = false;
}