Как я могу разбить числа на их значения di git? - PullRequest
2 голосов
/ 20 апреля 2020

Как часть алгоритма преобразования римских чисел, я хотел бы разбить данное число на их значения di git. Я точно хочу сделать следующее:

1984 = 1000+900+80+4

Было бы лучше сообщить вам, где я буду использовать результат. Я получу результат в массиве и сопоставлю его с римскими цифрами, например, 1000 = M, 900 = CM, 80 = LXXX, 4 = IV.

1984 = MCMLXXXIV

Какая функция необходима для получения ожидаемого результата?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Я настроил это на одну строчку:

Array.from((1984).toString()).reverse().map((d, i) => d * 10 ** i)

Это даст вам детали в обратном порядке (сначала наименее значимый di git); в зависимости от ваших потребностей вы можете добавить еще .reverse() в конце.

1 голос
/ 20 апреля 2020

Вот два небольших алгоритма, которые делают именно это:

function separate(number) {
  const length = number.toString().length;
  const result = [0];
  let step = 1;

  for (let i= 0; i< length; i++) {
    step *= 10;
    let part = number % step;

    result.forEach(previous => {
      part -= previous;
     });

    result[i] = part;
  }

  return result;
}

и

function separate(number) {
  const str = number.toString();
  const result = [];

  for (var i = 0; i < str.length; i++) {
    result[i] = str.charAt(i) * Math.pow(10, i);
  }

  return result;  
}

Возвращает массив с каждым отдельным числом

...