Палиндром

(1221 - 1221 % 10) / 10 = 109.89

  1. 1221%10 = 1; (остаток от деления 1221 на 10)
  2. 1221 - 1 = 1220;
  3. 1220/10 = 122;

Каким образом у вас получилось 109.89 я не представляю.

Решение автора просто шикарное.

У меня было такое же решение. Только вот почему нужно создавать дополнительную переменную number? Я не понимаю почему происходит ошибка, если использовать только poly вместо number к которой присвоили poly. Подскажите кто-нибудь пожалуйста.

Аааа, мы ведь в конце сравниваем. А в цикле значение poly изменяется, а нам нужно оставить его исходным для сравнения в конце. Что-то я сам себя запутал :laughing: :laughing: :grin:

var poly = 2662;
var ylop = 0;
var isPalindrome = false;
var num;
var quantity = 0;
var subPoly = poly;

var i = 1;

while (poly / i >= 1) {
  quantity++;
  i *= 10;
}

for (var j = 1; j <= quantity; j++) {
  ylop += (subPoly % 10) * (10 ** (quantity - (j)));
  if (j !== quantity) {
    subPoly = Math.floor(subPoly / 10);
  } else {
    subPoly = poly;  
} 
}

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

Сначала я нашел разрядность, потом создал цикл, в котором прохожусь по всем цифрам якобы палиндрома
“Палиндрому наоборот” прибавляю значение последней цифры палиндрома, то есть сначала последнюю цифру умножаю на 10 в степени максимальной позиции числа, то есть делаю ее первой в обратном палиндроме и так далее

P.S. Для тех, кто как и я зашел посмотреть объяснение для того, чтоб потом решить самому - так не получится: так как объяснил я, на 100% пойму только я, и так же с любым другим автором, я считаю. Поэтому вам просто нужно посидеть, прокрутить задачу, но не стану говорить, что смотреть чужие решения - плохо. Часть решения я подсмотрел у других людей)

Возможно, не такое корректное и правильное решение, но за то короткое и работающее))

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

if (ylop = poly.toString().split(’’).reverse().join(’’) == poly) {
isPalindrome = true
}

2 дня ломал голову над этой задачей. В итоге родилась такая программа, которая любое число “Зеркалит”.
В итоге пришлось только еще одну переменную добавить. Ну и Math.flor(), о котором речи не шло в курсе помог.
Может кому поможет. Ну и от оценки/критики не откажусь;)

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

while (poly >= 1) {
ylop = ylop * 10 + poly % 10;
poly = Math.floor(poly / 10);
}

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

var poly = 7997;
var ylop = 0;
var isPalindrome = false;
var temporaryNumber = ‘’;
var number;

number = String(poly % 10)
numberPoly = poly

while (numberPoly > 0) {

if ( numberPoly > 0) {
numberPoly = Math.floor(numberPoly / 10)
console.log('numberPoly ’ + numberPoly)
if (numberPoly == 0) {
numberPoly = ‘’;
} else {
ylop = String(numberPoly % 10)
console.log('ylop ’ + ylop)
temporaryNumber = temporaryNumber + ylop
}
}
}

number = number + temporaryNumber
ylop = Number(number)
console.log('ylop ’ + ylop)
console.log('poly ’ + poly)

if (ylop === poly) {
isPalindrome = true

} else {
isPalindrome = false
}

Я вообще не понял как ylop , которая имеет значение 0 , умножается на 10 да и еще и результат какой то получаем

На первой итерации в ylop записывается только остаток от деления poly на 10. 0 на десять можно умножать, просто получится 0. На следующей итерации уже остаток от деления умножается на десять и к нему прибавляется очередной остаток от деления от укороченного на одну цифру ylop. Вот)

Вам или кто-то помогает с решением задач, или вы реально все сами знаете. Но до меня большая часть самого ТЗ очень долго доходит. Когда я вижу решение задачи я сразу же все понимаю что к чему, но сам решить не могу.

дайте пожалуйста обратную связь по коду:

let poly = 1221; //палиндром
let ylop = 0; //анти-палиндром
let isPalindrome = false;

let z = poly; //целая часть от деления, ее нужно округлять
let y = poly; //остаток от деления, округлять не нужно


while (z>=1) {
  y = z % 10;
  z = Math.floor(z / 10);
  ylop = Math.round(ylop + String(y));
  
  console.log('y = ' + y);
  console.log('z = ' + z);
  console.log('ylop = ' + ylop);

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

100%

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

for (let r = poly; r > 0; r = (r - (r % 10)) / 10) {
  ylop = ylop * 10 + (r % 10);
}

isPalindrome = poly === ylop;

Потратил несколько вечеров на то, чтобы самому придти к решению, иногда впадал в отчаяние и хотел залезть на форум… Но все таки не сдался и наконец решил. :face_with_head_bandage:

let poly = 3223;
let ylop = 0;
let isPalindrome = false;

for (i = poly ; Math.floor(i) > 0; i /= 10) {
  ylop = ylop * 10 + Math.floor(i) % 10

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

console.log(isPalindrome)
1 лайк
let poly = 1221;
const polyOld = poly;
let ylop = '';
let isPalindrome = false;

while (poly > 0) { 
  ylop += String(poly % 10);
  poly = Math.floor(poly / 10);
} 

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

Я решил это таким образом хД

моё решение. Задание пройдено, но не знаю, насколько решение верное. Но сразу так я его почти себе представлял:

let poly = 1221;
let ylop = ‘’;
let currentPoly = poly
let isPalindrome = false;
for (i=10;currentPoly>0;) {
ylop += ‘’ + currentPoly % i;
currentPoly = Math.floor(currentPoly/i);
console.log(ylop)
}
if (poly == ylop) {
isPalindrome = true
console.log( poly + ’ - является палиндромом’)
}

let poly = 1221;
let isPalindrome = false;
function ylop(str) {
const s = String(str);
return s.split("").reverse().join("");
}
if (ylop(poly) == poly) {isPalindrome = true}

Вот мое решение без циклов и функций))

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

poly_ost = poly%10;
poly_del = (poly-poly_ost)/10;
poly_ost_2 = poly_del%10;
poly_del_2 = (poly_del - poly_ost_2)/10;
poly_ost_3 = poly_del_2%10;
poly_del_3 = (poly_del_2 - poly_ost_3)/10;
poly_ost_4 = poly_del_3%10;

ylop = ((poly_ost*10+poly_ost_2)*10+poly_ost_3)*10+poly_ost_4;

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

ylop = Number(String(poly).split('').reverse().join(''));
poly === ylop ? isPalindrome = true : isPalindrome = false;
let poly = 2222;
let ylop = 0;
let isPalindrome = false;
let polyString = String(poly);
let num;

for (let i = 0; i < polyString.length; i++) {
  num = String(poly % 10)

  console.log(num);
  
  poly = Math.floor(poly / 10);
  
  ylop += num;
  
  ylop = Number(ylop);
  
   if(ylop === poly) {
      isPalindrome = true;
     
}
  
}

Всем привет! Долго тупил над подсказкой, решил посмотреть ответы тут, но видимо у меня с математикой совсем плохо, в принципе примеры разбирал и понимал но сам бы не догадался так решить как многие тут пишут. Вот мой кастыльный вариант, практически без математики:

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

var number = ‘’;
poly = String(poly);

for (var i = poly.length - 1; i >= 0; i-- ) {
number += poly[i];
}

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

но пришлось воспользоваться массивом, если бы я проходил тренажёры по порядку то не смог бы этого сделать. Хочу переделать, что бы решение было как задумал автор.