FreeCodeCampChina / freecodecamp.cn

FCC China open source codebase and curriculum. Learn to code and help nonprofits.
https://fcc.asia/
Other
36.99k stars 1.38k forks source link

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

Open seakingxc opened 5 years ago

seakingxc commented 5 years ago

Challenge Roman Numeral Converter 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);

NidusP commented 5 years ago

function convert(num) { var a=[["","I","II","III","IV","V","VI","VII","VIII","IX"], ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"],
["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"], ["","M","MM","MMM"]];
var i=a[3][Math.floor(num/1000)]; var j=a[2][Math.floor(num%1000/100)]; var k=a[1][Math.floor(num%100/10)]; var l=a[0][num%10]; return i+j+k+l;

}

qsbit commented 5 years ago

function convert(num) { var a=[ ["","I","II","III","IV","V","VI","VII","VIII","IX"], //个位 ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"], //十位 ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"], //百位 ["", "M", "MM", "MMM"],//千位 ];
return num.toString().split('').reverse().map((cur, i) => { return a[i][cur]; }).reverse().join(''); }

convert(10);

wenzhaoda commented 5 years ago

function convert(num) { var nnum=num.toString().split(""); var fir=[["","I","II","III","IV","V","VI","VII","VIII","IX"], ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"], ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"], ["0","M","MM","MMM"]]; for(var i=0;i<num.toString().length;i++){ nnum.splice(nnum.length-i-1,1,fir[i][nnum[nnum.length-i-1]]); } return nnum.join(""); }

convert(891);

forkingw commented 4 years ago
  var romanNumberObj = {
   "0": ["I","V"],
   "1": ["X","L"],
   "2": ["C","D"],
   "3": ["M"]
  };
  var numLength = 0;
  var arr = [];
  var newArr = [];
  //判断用户传入是否是一个数字,是一个数字的话,算出数字的长度;
  if(!isNaN(num) || num < 4999 && num > 0){
    var strnum = num + "";
    arr = strnum.split("");
    numLength = arr.length;
  }else{
    return "请输入一个 小于5000 的正整数;";
  }

  for(var i = 0; i < numLength; i ++){
    var diff = arr[i];
    var index = numLength - i -1;
    if(diff == 9){
      var a = romanNumberObj[index][0] + romanNumberObj[index + 1][0];
      newArr.push(a);
    }else if(diff > 5){
      var b = romanNumberObj[index][1];
      while(diff > 5){
        diff--;
        b += romanNumberObj[index][0];
      }
      newArr.push(b);
    }else if(diff == 5){
      var c = romanNumberObj[index][1];
      console.log("c--" + c);

      newArr.push(c);
    }else if(diff == 4){
      var d = romanNumberObj[index][0] + romanNumberObj[index][1];
     newArr.push(d);
    }else{
      var e = "";
       while(diff > 0){
        diff--;
        e += romanNumberObj[index][0];
      }
      newArr.push(e);
    }
  }
  return newArr.join("");
 }

 convert(12);