Палиндром

:laughing:Сексуальный палиндром:

var poly = 1254368476598574;
var Poly = poly;
var ylop = 0;
var isPalindrome = false;

var N = 0;
while (Poly > 1) {
  Poly /= 10;
  N++;
}

for (var i=1;i<=N; i++) {
var ylop = ylop + (Math.floor((poly - (Math.floor(poly / Math.pow(10, i)) * Math.pow(10, i))) / Math.pow(10, i-1)) * Math.pow(10, N - i))
}

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

Решила сделать вот так:
var poly = 1221;
var ylop = 0;
var isPalindrome = false;
var staticticPoly = poly;

function getlength(poly) {
return poly.toString().length;
}

var n = getlength(poly);

for (var i = 1; i < n; i++) {
if (poly >= 10) {
ylop += String(poly % 10);
poly = Math.floor(poly / 10);
console.log(ylop);
}
if (poly < 10 && poly >= 1) {
ylop += String(poly);
ylop = Number(ylop);
console.log(ylop);
}
}

poly = staticticPoly;

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

Пытаюсь понять как работают эти формулы:

ylop = ylop * 10 + polyCheck % 10;
polyCheck = (polyCheck - polyCheck % 10) / 10;

подставил значения:
итерация - 1:
ylop = 0 * 10 + 1221 % 10 = 122.1
polyCheck = (1221 - 1221 % 10) / 10 = 109.89

итерация - 2:
ylop = 122.1 * 10 + 109.89 % 10 = 1231.989
polyCheck = (109.89 - 109.89 % 10) / 10 = 10.879109

третью итерацию не считаю - какая-то хрень уже на второй происходит.
Подскажите, может не правильно что-то подставил?

вы разницу между делением и остатком от деления понимаете?

1 лайк

Решила при помощи конкатенации:

var poly = 1221;
var ylop = 0;
var isPalindrome = false;
var str = "";
var polyCopy = poly;

while (polyCopy >= 1){
  var temp = polyCopy % 10;
  str += temp.toString();
  polyCopy = Math.floor(polyCopy / 10);
}
ylop = parseInt(str);
if (ylop === poly){
  isPalindrome = true;
  }

Предложил решение тут Палиндром
и тут Палиндром

Там два варианта. Первый с переводом в строку и с заведением сторонних переменных (что на мой взгляд не честно), и второй вариант - чистый (с стандартными переменными). Если администрация решит удалить мой ответ, я не против. Отсутствие ответа и готового решения заставляет думать своей головой.

Спасибо, благодаря тебе разобрался в этом задании.
У тебя самый понятный код.

Цикл for, и с вводом количества символов вручную

// Длина числа до 6 символов
for (i = 1, j = 6; j > 0; i++, j–) {

if(poly / 10j < 1) {
i = 0;
ylop = poly %10 * 10
(j-1)
}

ylop = ylop + ((poly - poly % 10j) / 10j) %10 * 10**(i-1);
}

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

и мой вариант до кучи
вроде бы в пределах уроков главы.

var poly = 1221;
var ylop = 0;
var isPalindrome = false;
var length = 0;
var ostatok = 0;
var desatok = 0;

for (var i = 1; poly / i >= 1; i *= 10) {length ++;}

for (var i=1, k=10; i<=length; i++, k*=10) {
desatok = (poly - ostatok)%k;
ostatok = ostatok + desatok%k;

for (var j=1, x=1; j<=(length-i); j++) { x*=10; }

ylop = ylop + desatok * x * 10/k;
}

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

1 лайк

Почему вот ЭТО в подсказке ни у кого не вызывает вопросов?

// Уменьшаем изначальное число
505 / 10 = 50;
// 50 — результат деления 505 на 10

(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. Вот)

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