0
로마 숫자 변환 기능에서 예기치 않은 결과가 나타납니다. 1, 2 또는 4 자리 숫자를 올바르게 평가합니다. 또한 4 자리 숫자의 세 번째 숫자도 올바르게 처리합니다. 숫자가 3 자릿수이면 자기 자리와 같은 백의 위치를 계산합니다.로마 숫자 스위치 케이스가 제대로 평가되지 않습니다.
function convertToRoman(num) {
var evaluate = num.toString();
var replace = "";
var oneUnit;
var fiveUnit;
var tenUnit;
for (var i = 0; i < evaluate.length; i++)
{
switch (evaluate.length | i)
{
case 1|0:
case 2|1:
case 3|2:
case 4|3:
oneUnit = "I";
fiveUnit = "V";
tenUnit = "X";
break;
case 2|0:
case 3|1:
case 4|2:
oneUnit = "X";
fiveUnit = "L";
tenUnit = "C";
break;
case 3|0:
case 4|1:
oneUnit = "C";
fiveUnit = "D";
tenUnit = "M";
break;
case 4|0:
oneUnit = "M";
fiveUnit = "MMMMM";
tenUnit = "MMMMMMMMMM";
break;
}
switch (evaluate.charAt(i))
{
case "1":
replace += oneUnit;
break;
case "2":
replace += oneUnit + oneUnit;
break;
case "3":
replace += oneUnit + oneUnit + oneUnit;
break;
case "4":
replace += oneUnit + fiveUnit;
break;
case "5":
replace += fiveUnit;
break;
case "6":
replace += fiveUnit + oneUnit;
break;
case "7":
replace += fiveUnit + oneUnit + oneUnit;
break;
case "8":
replace += fiveUnit + oneUnit + oneUnit + oneUnit;
break;
case "9":
replace += oneUnit + tenUnit;
break;
}
}
num = replace;
return num;
}
(555)에 대한
원하는 반환 : "DLV"555에 대한 반환 : "VVV"
1555에 대한원하는 반환 : "MDLV"1555에 대한 반환 : "MDLV"
이유있는 3 자리 숫자의 처음 2 자리가 올바른 경우에 할당되지 않습니까?
언어 구문에 몇 가지 문제가있는 것 같습니다. 논리 OR 연산자 ('||')가 아닌 비트 OR 연산자 ('|')를 사용하고 있다는 것을 알고 계십니까? – user1421750
나는 if 문에 "&&"와 같은 것을 요구하므로 양쪽 진술이 모두 true가되도록해야한다. 어떻게해야합니까? –
switch 문은 대/소문자 값에 대해 하나의 식만 계산할 수 있습니다. 스위치 블록을 일련의 if/else 문으로 변환해야합니다. – user1421750