CengageRomans

by Matthew Vasallo

JavaScript

var RomanMath = {};

RomanMath.ConvertToRomanNumeral = function (num) {
    var answer = "";

    answer += RomanMath._convertSingleArabicPlaceToRoman(num,1000);
    answer += RomanMath._convertSingleArabicPlaceToRoman(num,100);
    answer += RomanMath._convertSingleArabicPlaceToRoman(num,10);
    answer += RomanMath._convertSingleArabicPlaceToRoman(num,1);

    return answer;
};

RomanMath._convertSingleArabicPlaceToRoman = function ( num, placeToCalculate ) {
    var romanTens = ["I", "X", "C", "M"];
    var romanFives = ["V", "L", "D"];

    var placeRemainder = Math.floor( (num % (placeToCalculate *10)) / placeToCalculate);
    var baseIndex = (placeToCalculate.toString().length - 1)
    var mod5Num = placeRemainder % 5;

    var answer = "";

    if (mod5Num === 4) {
        if (placeRemainder < 5) {
            answer = romanFives[baseIndex];
        } else {
            answer = romanTens[baseIndex + 1];
        }

        answer = romanTens[baseIndex] + answer;

    } else if (placeRemainder >= 5 &&
        mod5Num >= 0) {
        answer = romanFives[baseIndex] + RomanMath._add1To3(romanTens[baseIndex], mod5Num);
    }
    else {
        answer = RomanMath._add1To3(romanTens[baseIndex], placeRemainder);
    }

    return answer;
};

RomanMath._add1To3 = function (numeral, number) {
    var i = number;
    var answer = "";

    while (i) {
        answer += numeral;
        i--;
    }

    return answer;
};