FreeCodeCampChina / FreeCodeCampChina/freecodecamp.cn

我这样写运行可以通过,但是感觉很蠢。。。

Open
#566 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
CSS
Stars
37.8k
Forks
1.4k
PR merge metrics
No merged PRs in 30d

Description

Challenge [Roman Numeral Converter](https://www.freecodecamp.cn/challenges/roman-numeral-converter#?solution=) has an issue.
User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36.
Please describe how to reproduce this issue, and include links to screenshots if possible.

function convert(num) {
//I/V/X/L/C/D/M
//1/5/10/50/100/500/1000

//分析数字有多少位,比如有3个就是百位、2个就是十位、1个就是个位
var numlength = String(num).length;
var arr = String(num).split("");
var result="";

switch(numlength){
case 4:
//千位
var count = Number(arr[0]);
while(count){
result+=getRomanByNum(1000);
count--;
}
result+=bai(arr,1);
result+=shi(arr,2);
result+=ge(arr,3);
break;
case 3:
result+=bai(arr,0);
result+=shi(arr,1);
result+=ge(arr,2);
break;
case 2:
result+=shi(arr,0);
result+=ge(arr,1);
break;
case 1:
result+=ge(arr,0);
break;
}
return result;
}
function bai(arr,index){
var result="";
var count = Number(arr[index]);
if(count >0){
//百位
if(count < 5){
if(count ===4){
result+=getRomanByNum(100);
result+=getRomanByNum(500);
}else{
while(count){
result+=getRomanByNum(100);
count--;
}
}
}else if(count == 5){
result+=getRomanByNum(500);
}else{
if(count === 9){
result+=getRomanByNum(100);
result+=getRomanByNum(1000);
}else{
result+=getRomanByNum(500);
count = count-5;
while(count){
result+=getRomanByNum(100);
count--;
}
}
}
}
return result;
}

function shi(arr,index){
var result="";
//十位
var count = Number(arr[index]);
if(count >0){
if(count < 5){
if(count ===4 ){
result+=getRomanByNum(10);
result+=getRomanByNum(50);
}else{
while(count){
result+=getRomanByNum(10);
count--;
}
}
}else if(count == 5){
result+=getRomanByNum(50);
}else{
if(count === 9){
//9x
result+=getRomanByNum(10);
result+=getRomanByNum(100);
}else{
result+=getRomanByNum(50);
count = count-5;
while(count){
result+=getRomanByNum(10);
count--;
}
}
}
}
return result;
}

function ge(arr,index){
var result="";
//个位
var count = Number(arr[index]);
if(count >0){
if(count < 5){
if(count === 4){
result+=getRomanByNum(1);
result+=getRomanByNum(5);
}else{
while(count){
result+=getRomanByNum(1);
count--;
}
}
}else if(count == 5){
result+=getRomanByNum(5);
}else{
if(count === 9){
result+=getRomanByNum(1);
result+=getRomanByNum(10);
}else{
result+=getRomanByNum(5);
count = count-5;
while(count){
result+=getRomanByNum(1);
count--;
}
}
}
}
return result;
}
function getRomanByNum(num){
var roman="";
switch(num){
case 1:
roman = "I";
break;
case 5:
roman = "V";
break;
case 10:
roman = "X";
break;
case 50:
roman = "L";
break;
case 100:
roman = "C";
break;
case 500:
roman = "D";
break;
case 1000:
roman = "M";
break;

}
return roman;
}

convert(1004);

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.