Konwersja z arabskiego systemu na rzymski

0

Czołem,
chciałem napisać funkcję za pomocą rekurencji zamiast while, jednak funkcja nie przechodzi testów przy bardziej "skomplikowanych" liczbach. Czy ktoś mógłby pomóc w znalezieniu problemu?

function convertToRoman(num) {
 var newNum = "";
 var arabNums = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ];
  var romanNums = [ 'M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I' ];
  for (var i = 0; i < arabNums.length; i++) {
    if (num >= arabNums[i]) {
      newNum += romanNums[i];
      num -= arabNums[i];
      console.log(num);
      convertToRoman(num);
    }
  }
  return newNum;
}

convertToRoman(53);
0

Błędne założenia. Zobacz sobie jak się buduje liczby rzymskie.
Nawet "nieskomplikowane" cyfry typi 1, 2, 3 nie zostaną skonwertowane dobrze przez Twój skrypt.

Może warto by było rozłożyć skrypt dla 4 przypadków w zależności od miejsca [n1,n2,n3,n4] i użyć zmiennych LOW,MID, HIGH.
I coś na zasadzie for ( nX < 5 ) { rome += LOW }, ( nX = 5 ) { rome += MID} ... oraz 3 przypadek.
Zmienne oczywiście podstawiane zależnie od miejsca dziesiętnego.

0

Looknij sobie jakiś algorytm do tego i na podstawie algorytmu przerób program: https://math.stackexchange.com/a/251526
O algorytmach tyś słyszał?

0

funkcja nie przechodzi testów przy bardziej "skomplikowanych" liczbach.

Jakich?

0

Problem z algorytmem jest taki, że np. w przypadku liczby 85 musiałbyś odliczyć 50, 10, 10, 10, 5 - podczas gdy twój program nigdy nie powtarza danej cyfry, czyli jest w stanie odliczyć tylko 50, 10, 5.

1 użytkowników online, w tym zalogowanych: 0, gości: 1