Следующий алгоритм состоит в том, чтобы преобразовать порядковые числа в римские числа. Он работает для большинства чисел, но для некоторых из них все еще есть проблемы. Например, цифры 500 или 1000 не работают, и я не знаю, почему. Я знаю, что чего-то не хватает; любая помощь?алгоритм javascript, преобразовывающий в римские числа
Код:
function convertToRoman(num) {
//TABLE OF EQUIVALENCES
var arrConv=[{1:'I'},{2:'II'},{3:'III'},{4:'IV'},{5:'V'},{6:'VI'},{7:'VII'},{8:'VIII'},{9:'IX'},{10:'X'},{20:'XX'},{30:'XXX'},{40:'XL'},{50:'L'},{60:'LX'},{70:'LXX'},{80:'LXXX'},{90:'XC'},{100:'C'},{200:'CC'},{300:'CCC'},{400:'CD'},{500:'D'},{600:'DC'},{700:'DCC'},{800:'DCCC'},{900:'CM'},{1000:'M'},{2000:'MM'},{3000:'MMM'},{4000:'MMMM'},{5000:'MMMMM'},{6000:'MMMMMM'},{7000:'MMMMMMM'},{8000:'MMMMMMMM'},{9000:'MMMMMMMMM'}];
//First we break down the number into its units
//and create an array ex: 652 ==> [600, 50, 2]
var arr=[num.length];
arr=num.toString().split("").reverse();
var i=1;
for (var k=0;k<arr.length;k++){
arr.splice(k,1,arr[k]*i);
i*=10;
}
//We make an array of objects with the number and the roman number equivalence
var romansArray=[];
for (i=0;i<arr.length;i++){
var val=arrConv.filter(function(obj){
return obj[arr[i]];
})[0];
romansArray.push(val);
}
//I get rid of all the null values
var result=romansArray.filter(function(val){
return (val!=null);
});
//It returns the string with the roman number
return result.map(function(value,key){
return result[key][arr[key]];
}).reverse().join("");
}
почему бы не использовать объект разговора вместо массива и необходимость как '{1: 'I', 2: 'II', ...}' –
Это правда, я согласен с вами. Я думаю, что моя проблема в том, что я неправильно начал алгоритм, и я следил за ним, избегая любых изменений. Спасибо!! – galeonweb