function convertToRoman(num) {
var thisMap = {
1:[1],
2:[1, 1],
3:[1, 1, 1],
4:[1, 5],
5:[5],
6:[5, 1],
7:[5, 1, 1],
8:[5, 1, 1, 1],
9:[1, 10],
0:[0]
};
var numMap = {
1000:"M",
500:"D",
100:"C",
50:"L",
10:"X",
5:"V",
1:"I"
};
numArr = num.toString().split("");
var thisIndex = 1;
var tallyArr = [];
for (var i = numArr.length - 1; i >= 0; i--) {
tallyArr.unshift(thisMap[numArr[i]]);
}
thisIndex = Math.pow(10, tallyArr.length - 1);
checkArr = [];
<<<BUG HERE>>>
for (var x = 0; x < tallyArr.length; x++) {
for (var y = 0; y < tallyArr[x].length; y++) {
tallyArr[x][y] *= thisIndex;
}
thisIndex = thisIndex/10;
}
<<</BUG HERE>>>
var finalArr = [];
for (var a = 0; a < tallyArr.length; a++) {
for (var b = 0; b < tallyArr[a].length; b++) {
finalArr.push(numMap[tallyArr[a][b]]);
}
}
finalAnswer = finalArr.join("");
return finalAnswer;
}
convertToRoman(88);
그래서 숫자를 자바 스크립트로 로마 숫자로 변환하는 기능입니다. 기본적으로 thisMap을 사용하여 모든 숫자를 올바른 형식으로 포맷 한 다음 thisIndex를 사용하여 1000, 100 또는 10으로 곱한 다음 numMap과 비교하여 올바른 로마 숫자를 얻습니다.자바에서 로마 숫자로 변환 - 이상한 버그
이러한 경우에는 44, 99, 또는 3999를 제외하고, 테스트 케이스의 대부분에서 작동하는 것 같다
, 그래서 44 XLXL이되고, 때를 잘못 양만큼의 숫자를 곱 보인다 XLIV 여야합니다.
버그가 < < 사이에있는 것 같습니다. >> 그 이유는 숫자가 잘못 곱해진 것 같기 때문입니다.
그러나 문제는 발견 할 수 없습니다.
감사합니다.
에 체크 아웃 : http://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter이 SO http://stackoverflow.com/a/ 9083076/5324369 작동 알고리즘이 있습니다. –