перевод арабских в римские
прошу вас объяснить мне одну вещь, я читал про многомерные массивы, но никак не могу додуматься, дана функция по переводу, она рабочая, я проверял:
function romanNumerals(number) {
var numberArray = number.toString().split("").reverse();
var result = "";
var numerals = [
["","I","II","III","IV","V","VI","VII","VIII","IX"],
["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"],
["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"],
["","M","MM","MMM"]];
for (var i in numberArray){
result = numerals[i][parseInt(numberArray[i])] + result;
}
return result;
}
объясните пожалуйста, как цикл находит нужное число, и переводит его из римского в обычное, желательно, подробнее, заранее, благодарен!
Ответы (1 шт):
Автор решения: EzioMercer
→ Ссылка
Чтобы разобраться в том как работает функция нужно взять лиcток бумаги и начинать пошагово самому проходить по всему алгоритму. Разберём как работает эта функция на примере 1067:
- Первая строка, т.е. что хранится в
numberArray- Переводим число в строку:
"1067" - Создаём массив из цифр данного числа:
['1', '0', '6', '7'] - Переворачиваем массив:
['7', '6', '0', '1']
- Переводим число в строку:
- Объявляем начальное значение для хранилища ответа:
result = "" - Объявляем набор римских знаков:
numerals = [[...], [...], ...] - Начинаем перебирать индексы в массиве
numberArray. Т.к. в данном случаем у нас массив имеет длину 4, а нумеруются элементы с 0, тоiбудет пробегать значения от 0 до 3 включительно - Начинаем поиск и добавляем предыдущий ответ:
- Вычисляем
numerals[0] = ["","I","II","III","IV","V","VI","VII","VIII","IX"] - Вычисляем
numberArray[0] = '7' - Выделяем из строки целое число:
parseInt('7') = 7 - Из массива
numerals[0]находим 7-ой элемент:numerals[0][7] = "VII" - Прибавляем к найденному элементу результат:
"VII" + "" = "VII" - Повторяем родительский пункт для
i = 1
- Вычисляем
- Начинаем поиск и добавляем предыдущий ответ:
- Вычисляем
numerals[1] = ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"] - Вычисляем
numberArray[1] = '6' - Выделяем из строки целое число:
parseInt('6') = 6 - Из массива
numerals[1]находим 6-ой элемент:numerals[1][6] = "LX" - Прибавляем к найденному элементу результат:
"LX" + "VII" = "LXVII" - Повторяем родительский пункт для
i = 2
- Вычисляем
- Начинаем поиск и добавляем предыдущий ответ:
- Вычисляем
numerals[2] = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"] - Вычисляем
numberArray[2] = '0' - Выделяем из строки целое число:
parseInt('0') = 0 - Из массива
numerals[2]находим 0-ой элемент:numerals[2][0] = "" - Прибавляем к найденному элементу результат:
"" + "LXVII" = "LXVII" - Повторяем родительский пункт для
i = 3
- Вычисляем
- Начинаем поиск и добавляем предыдущий ответ:
- Вычисляем
numerals[3] = ["","M","MM","MMM"] - Вычисляем
numberArray[3] = '1' - Выделяем из строки целое число:
parseInt('1') = 1 - Из массива
numerals[3]находим 1-ый элемент:numerals[3][1] = "M" - Прибавляем к найденному элементу результат:
"M" + "LXVII" = "MLXVII" - Закончили цикл
- Вычисляем
- Вернули результат:
return "MLXVII"