Hướng dẫn roman numeral converter javascript freecodecamp - công cụ chuyển đổi chữ số la mã javascript freecodecamp

Sự mô tả

Chuyển đổi số đã cho thành một chữ số La Mã.Tất cả các câu trả lời về chữ số La Mã nên được cung cấp trong trường hợp trên.

Xét nghiệm

tests:
  - text: convertToRoman(2) should return "II".
    testString: assert.deepEqual(convertToRoman(2), "II");
  - text: convertToRoman(3) should return "III".
    testString: assert.deepEqual(convertToRoman(3), "III");
  - text: convertToRoman(4) should return "IV".
    testString: assert.deepEqual(convertToRoman(4), "IV");
  - text: convertToRoman(5) should return "V".
    testString: assert.deepEqual(convertToRoman(5), "V");
  - text: convertToRoman(9) should return "IX".
    testString: assert.deepEqual(convertToRoman(9), "IX");
  - text: convertToRoman(12) should return "XII".
    testString: assert.deepEqual(convertToRoman(12), "XII");
  - text: convertToRoman(16) should return "XVI".
    testString: assert.deepEqual(convertToRoman(16), "XVI");
  - text: convertToRoman(29) should return "XXIX".
    testString: assert.deepEqual(convertToRoman(29), "XXIX");
  - text: convertToRoman(44) should return "XLIV".
    testString: assert.deepEqual(convertToRoman(44), "XLIV");
  - text: convertToRoman(45) should return "XLV"
    testString: assert.deepEqual(convertToRoman(45), "XLV");
  - text: convertToRoman(68) should return "LXVIII"
    testString: assert.deepEqual(convertToRoman(68), "LXVIII");
  - text: convertToRoman(83) should return "LXXXIII"
    testString: assert.deepEqual(convertToRoman(83), "LXXXIII");
  - text: convertToRoman(97) should return "XCVII"
    testString: assert.deepEqual(convertToRoman(97), "XCVII");
  - text: convertToRoman(99) should return "XCIX"
    testString: assert.deepEqual(convertToRoman(99), "XCIX");
  - text: convertToRoman(400) should return "CD"
    testString: assert.deepEqual(convertToRoman(400), "CD");
  - text: convertToRoman(500) should return "D"
    testString: assert.deepEqual(convertToRoman(500), "D");
  - text: convertToRoman(501) should return "DI"
    testString: assert.deepEqual(convertToRoman(501), "DI");
  - text: convertToRoman(649) should return "DCXLIX"
    testString: assert.deepEqual(convertToRoman(649), "DCXLIX");
  - text: convertToRoman(798) should return "DCCXCVIII"
    testString: assert.deepEqual(convertToRoman(798), "DCCXCVIII");
  - text: convertToRoman(891) should return "DCCCXCI"
    testString: assert.deepEqual(convertToRoman(891), "DCCCXCI");
  - text: convertToRoman(1000) should return "M"
    testString: assert.deepEqual(convertToRoman(1000), "M");
  - text: convertToRoman(1004) should return "MIV"
    testString: assert.deepEqual(convertToRoman(1004), "MIV");
  - text: convertToRoman(1006) should return "MVI"
    testString: assert.deepEqual(convertToRoman(1006), "MVI");
  - text: convertToRoman(1023) should return "MXXIII"
    testString: assert.deepEqual(convertToRoman(1023), "MXXIII");
  - text: convertToRoman(2014) should return "MMXIV"
    testString: assert.deepEqual(convertToRoman(2014), "MMXIV");
  - text: convertToRoman(3999) should return "MMMCMXCIX"
    testString: assert.deepEqual(convertToRoman(3999), "MMMCMXCIX");

Dung dịch

Soln chính thức:

function convertToRoman(num) {
  var ref = [['M', 1000], ['CM', 900], ['D', 500], ['CD', 400], ['C', 100], ['XC', 90], ['L', 50], ['XL', 40], ['X', 10], ['IX', 9], ['V', 5], ['IV', 4], ['I', 1]];
  var res = [];
  ref.forEach(function(p) {
    while (num >= p[1]) {
      res.push(p[0]);
      num -= p[1];
    }
  });
  return res.join('');
}

Soln của tôi:

function convertToRoman(num) {
//Break the number into Thousands, Hundreds, Tens and Ones, and write down each in turn.
//get the digits
const numStr=num.toString();
const len=numStr.length;
let Thousands=0,Hundreds= 0,Tens= 0;
if(len>=2){Tens=parseInt(numStr[len-1-1]);}
if(len>=3){Hundreds=parseInt(numStr[len-1-2]);}
if(len==4){Thousands=parseInt(numStr[0]);}
const Ones=num%10;
const lookup=[
    ["","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 lookup[3][Thousands]+lookup[2][Hundreds]+
lookup[1][Tens]+lookup[0][Ones];
}

convertToRoman(36);

Giải pháp của tôi là giải pháp đơn giản và cơ bản nhất.Dưới đây là các giải pháp tiến bộ hơn được đưa ra bởi Hướng dẫn Freecodecamp: Soln 1:
Below are the more advance solutions given by the freecodecamp guide:
Soln 1:

var convertToRoman = function(num) {
  var decimalValue = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
  var romanNumeral = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];

  var romanized = "";

  for (var index = 0; index < decimalValue.length; index++) {
    while (decimalValue[index] <= num) {
      romanized += romanNumeral[index];
      num -= decimalValue[index];
    }
  }

  return romanized;
};

Soln 2:

Người giới thiệu

Cách nhanh nhất để chọn chữ số thứ n trong số nguyên trong JavaScript?Hướng dẫn thử thách Freecodecamp: Bộ chuyển đổi chữ số La Mã La Mã chuyển đổi chữ số La Mã - Một cây bút của Andy
freeCodeCamp Challenge Guide: Roman Numeral Converter
Roman Numeral Converter - A PEN BY Andy

Giải thích về phương pháp 1 được cung cấp trong Hướng dẫn Freecodecamp: Bộ chuyển đổi số La Mã - Hugh Winchester Roman Numerals Converter - Jack Lyons
Roman Numeral Converter - Hugh Winchester
Roman Numerals Converter - Jack Lyons

CDI bằng chữ số La Mã là gì?

Làm thế nào để viết chữ số CDI La Mã bằng số?CDI = 401.401.

MMD trong chữ số La Mã là gì?

Số MMD La Mã là 2500.2500.

Làm thế nào để bạn chuyển đổi thành chữ số La Mã?

Một phương pháp là vẽ một đường ngang, hoặc thanh, trên một chữ số La Mã (hoặc kết hợp các chữ số) để nhân nó với 1.000.Ví dụ: nếu bạn muốn viết 5.000, bạn sẽ viết V. ... Biểu đồ chuyển đổi chữ số La Mã ..