знаем, это свойство строки
let poly = 1234;
let ylop = 0;
let isPalindrome = false;
let polyString = String(poly);
ylop = Number(((polyString.split(’’)).reverse()).join(’’));
if (poly === ylop) {
isPalindrome = true;
}
Второй вариант
let polyString = String(poly);
for (i = polyString.length -1; i >= 0; i–) {
ylop += polyString[i];
ylop = Number(ylop)
}
if (poly === ylop) {
isPalindrome = true;
}
Выдумать другое решение, без использования всяких подсказок,не получилось. Как-то сразу стал думать в сторону строк, а не математического решения задачи. Вроде бы получилось сделать основываясь только на материале, который упоминался в курсе. Мой вариант решения:
let poly = 1221;
let ylop = 0;
let isPalindrome = false;
let i = poly;
while (i >= 1) {
ylop = ylop + String(i % 10);
i = String(parseInt(i/10));
}
if (ylop == poly) {
isPalindrome = true;
} else {
isPalindrome = false;
}`
Вот как-то так.
let poly = 5005;
let ylop = 0;
let isPalindrome = false;
let number = poly;
for (let i = 0; ylop < poly; i++) {
ylop = ylop * 10 + number % 10;
number = Math.floor(number / 10);
if(ylop === poly) {
!isPalindrome;
}
}
Я хз как Вы это сделали и чего Вам это стоило, но это великолепно. У меня чуть не вытек мозг, но к Вашему решению я и близко не пришел, авации. Хотя я и не понимаю что дает решение таких задач.
не работает
Сорян. Напортачил. Вот так надо:
let poly = 5005;
let ylop = 0;
let isPalindrome = false;
let number = poly;
for (let i = 0; ylop < poly; i++) {
ylop = ylop * 10 + number % 10;
number = Math.floor(number / 10);
if(ylop === poly) {
isPalindrome = true;
}
}
Вместо !isPalindrome;
нужно isPalindrome = true;
Но как-то странно, изначально у меня всё сработало.
Как регулярно пишут в рекламе Академии, “все ошибаются” и как известно " не ошибается лишь тот, кто ничего не делает", и те кто создает задания в процессе их решения и анализируя наши обсуждения вносят коррективы в алгоритмы проверки, и это не может не радовать.
Эту задачу проще всего решить с приведением типов, тк нет конкретного удобочитаемого способа как привести число в реверсивном порядке с использованием цикла (По крайней мере я его не нашел).
Мое решение:
let poly = 1221;
let ylop = '';
let isPalindrome = false;
let polyLength = 0;
let allNumbers = 1;
for (i = 1; i <= poly; i *= 10) {
polyLength++;
} console.log('Длина числа - ' + polyLength);
for (i = 1; i <= polyLength; i++) {
allNumbers *= 10;
currentNumber = Math.floor(poly % allNumbers / allNumbers * 10);
ylop += currentNumber + '';
}
if (poly == ylop) {
isPalindrome = true;
console.log('число ' + poly + ' - палиндром.')
}
К сожалению, у меня не получилось решить эту задачу. Смотрел подсказку, но мне не ясна сама логика построения числа в обратном порядке.
// 3.Начинаем собирать число 505 задом наперёд
// 5 — остаток от деления
// 50 — результат деления 505 на 10
5 * 10 + 50 % 10 = 50;
Вот почему мы здесь остаток от деления (5) умножаем на 10 , а не , скажем на 100 ? Откуда вообще знаем что результат нужно сложить с остатком от деления на 10 числа 50 ? Есть какая-то общепринятая формула в программинге ? Или всё это получено опытным путём и известно только в узких кругах ?
Мое решение:
let poly = 1221;
let ylop = 0;
let isPalindrome = false;
for (let i = poly; i >= 1; i /= 10){
let tempNumber = Math.floor(i % 10);
ylop = (ylop * 10) + tempNumber;
}
if (ylop === poly){
isPalindrome = true;
}
let poly = 7997;
let ylop = 0;
let isPalindrome = false;
var arr = [];
var count = 0;
var number = poly;
while(number>1) {
arr[count] = Math.trunc(number%10);
number/=10;
count++;
}
while(count>0) {
count–;
ylop += arr[count];
ylop /=10;
}
count = arr.length;
while(count>0) {
count–;
ylop*=10;
}
ylop = Math.round(ylop);
console.log(ylop)
if(ylop === poly) {
isPalindrome = true;
}
1.Находил остаток от 10-и.
2. Остаток конвертировал в символ.
3.Символ “приплюсовывал” к строке.
4.Делил число на 10 и округлял до минимального целого.
5.Проверял, “закончилось ли число”(temp===0)
let poly = 1221;
let ylop = 0;
let isPalindrome = false;
let flag=0;
let wordYlop="";
let temp = poly;
while(flag===0){
wordYlop+=(temp%10).toString();
temp=Math.floor(temp/10);
if(temp===0){
flag=1;
}
}
ylop = Number(wordYlop);
if(ylop===poly){
isPalindrome = true;
}else{
isPalindrome = false;
}
Отличный алгоритм. Я до такого не додумался. Пока смог только через перевод в строку.
Вы озвучили мои мысли.
У меня так получилось
let poly = 1221;
let ylop = 0;
let isPalindrome = false;
let number ;
let lastnumber = ‘’;
let quantity = 0;
let polylast;
let remains = 1;
let divider = 10;
while(remains >= 1){
remains = poly / divider;
quantity++;
if(remains >= 1){
divider *= 10;
}
}
polylast = poly;
for(let i = 1; i <= quantity; i++ )
{
number = poly % 10;
poly = poly / 10;
poly = Math.trunc(poly);
lastnumber = lastnumber + String(number)
}
ylop = Number(lastnumber);
if(ylop == polylast){
isPalindrome = true;
}
Наверняка, можно и лучше
let poly = 1221;
let ylop = 0;
let isPalindrome = false;
let initial = poly;
for (poly; poly >= 1; poly = (poly - poly % 10) / 10) {
ylop = ylop *10 + poly % 10;
}
if (initial === ylop) {
isPalindrome = true;
}
let poly = 1221;
let polyCopy = poly; // Копируем значение перменной poly т.к. она будет меняться
let ylop = ''; // вместо нуля делаем пустую строку
let isPalindrome = false;
while(poly) { //пока Poly не равно нулю
// Получаем последнюю цифру числа
result = poly % 10;
//Преобразуем цифру в строку и добавим в перменную
ylop += String(result);
// Срезаем последнее число
poly = Math.floor(poly / 10);
};
if (polyCopy == ylop) { // используем не строгое равенство т.к. yolp - строка, а polyCopy - число
isPalindrome = true;
}