题目:

给你一个整数,将其转为罗马数字。

1 <= num <= 3999 (取值范围)

  1. 罗马数字包含以下七种字符: I V X LCD M
  2. 字符 数值
  3. I 1
  4. V 5
  5. X 10
  6. L 50
  7. C 100
  8. D 500
  9. M 1000

示例1:

输入: num = 3
输出: "III"

示例2:

输入: num = 4
输出: "IV"

示例3:

输入: num = 9
输出: "IX"

示例4:

输入: num = 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.

示例5:

输入: num = 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.

解答:(mine)

var intToRoman = function(num) {
        let arr = [];

        if(num > 1000) {
          let t = 1000
          for(let i =0; i<4; i++){
            let n = Math.floor(num / t)*t
            arr.push(n)
            t /= 10
            num = num - n;
          }
        }

        if(num > 100 && num <= 1000) {
          let t = 100
          for(let i =0; i<3; i++){
            let n = Math.floor(num / t)*t
            arr.push(n)
            t /= 10
            num = num - n;
          }
        }

        if(num > 10 && num <= 100) {
          let t = 10
          for(let i =0; i<2; i++){
            let n = Math.floor(num / t)*t
            arr.push(n)
            t /= 10
            num = num - n;
          }
        }

        if(num <= 10 && num > 0) {
          arr.push(num)
        }

        let arr1 = []
        arr.forEach(item =>{
          if(item >=1000) {  //4位的
            let result1 = ''
            if(item < 4000){
              let n = item / 1000 ;
              for(let i = 0; i<n;i++){
                result1 += 'M'
              }
            }
            arr1.push(result1)
          }

          if(item >=100 && item < 1000) { //3位的
            let result2 = ''
            if(item < 400){
              let n = item / 100 ;
              for(let i = 0; i<n;i++){
                result2 += 'C'
              }
            }
            if(item == 400){
                result2 = 'C' + 'D'
            }
            if(item == 500){
                result2 = 'D'
            }
            if(item>500 && item<900) {
              let n = (item-500) / 100 ;
              for(let i = 0; i<n;i++){
                result2 += 'C'
              }
              result2 = 'D' + result2
            }
            if(item == 900) {
              result2 = 'C'+'M'
            }
            arr1.push(result2)
          }

          if(item >=10 && item < 100) { //2位的
            let result3 = ''
            if(item < 40){
              let n = item / 10 ;
              for(let i = 0; i<n;i++){
                result3 += 'X'
              }
            }
            if(item == 40){
                result3 = 'X' + 'L'
            }
            if(item == 50){
                result3 = 'L'
            }
            if(item>50 && item<90) {
              let n = (item-50) / 10 ;
              for(let i = 0; i<n;i++){
                result3 += 'X'
              }
              result3 = 'L' + result3
            }
            if(item == 90) {
              result3 = 'X'+'C'
            }
            arr1.push(result3)
          }

          if(item >=1 && item < 10) { //1位的
            let result4 = ''
            if(item < 4){
              let n = item / 1 ;
              for(let i = 0; i<n;i++){
                result4 += 'I'
              }
            }
            if(item == 4){
                result4 = 'I' + 'V'
            }
            if(item == 5){
                result4 = 'V'
            }
            if(item>5 && item<9) {
              let n = (item-5) / 1 ;
              for(let i = 0; i<n;i++){
                result4 += 'I'
              }
              result4 = 'V' + result4
            }
            if(item == 9) {
              result4 = 'I'+'X'
            }
            arr1.push(result4)
          }

        })
        return arr1.join('')
      };

解答:(no-mine)

var intToRoman = function(num) {
    const valueSymbols = [[1000, "M"], [900, "CM"], [500, "D"], [400, "CD"], [100, "C"], [90, "XC"], [50, "L"], [40, "XL"], [10, "X"], [9, "IX"], [5, "V"], [4, "IV"], [1, "I"]];
    const res=[]
    for([value,symbol] of valueSymbols){
        while(num>=value){
            res.push(symbol)
            num-=value
        }
    }
    return res.join('')
};

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/integer-to-roman
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。