Напишите функцию doubleNum
, которая возвращает переданное ей число увеличенное вдвое, если число не состоит из "двойников" — в таком случае функция просто возвращает исходное число:
// Обычные числа умножаются на 2
doubleNum(1); // 2
doubleNum(2); // 4
doubleNum(100); // 200
// "Двойники" нет
doubleNum(77); // 77
doubleNum(22); // 22
doubleNum(4343); // 4343
doubleNum(100100); // 100100
doubleNum(342342); // 342342
Привести число к стороке можно несколькими способами:
- Использовать метод
num.toString()
- Сложить число с пустой строкой
num + ''
- Использовать ES6 интерполяцию
${num}
При решении задачи нас интересует только первая половина строки, так как всё, что необходимо сделать для проверки на "двойников" — сложить две первые половины числа и проверить равны ли они исходному числу.
Для того чтобы отделить первую половину числа можно воспользоваться методом строк String.prototype.slice()
(MDN):
var half = str.slice(str.length / 2);
В случае, если длина строки будет нечетным числом, то в переменную half
запишется большая часть, то есть если длина строки 15 символов, то переменная будет содержать первые 8 из них.
После того как мы получили половину строки, всё, что остаётся сделать, — сложить половину строки саму с собой и проверить на равенство с исходным значением:
half + half === str;
В случае если переданное число состоит из "двойников", то результат будет true
:
'145' + '145' === '145145'; // true
'10' + '10' === '1010'; // true
'43' + '43' === '4343'; // true
'7' + '7' === '77'; // true
'2' + '2' === '22'; // true
Если же переданное число не состоит из двойников, то результатом будет false
:
'7' + '7' === '72'; // false
'123' + '123' === '123456'; // false
'20' + '20' === '2016'; // false
var doubleNum = function(num) {
var str = num.toString(),
half = str.slice(str.length / 2);
return half + half === str ? num : num * 2;
}
Автор решения — Антон Миргородченко.
function doubleNum(n){
var div = Math.pow(10, Math.floor((1 + Math.log10(n)) / 2));
return ((2 - (Math.floor(n / div) == (n % div))) * n );
}
Автор решения — Никита Бетманенко.
function doubleNum(num) {
return /^([0-9]+)\1$/.test(num.toString()) ? num : num * 2;
}