12. Integer to Roman

题目:
LeetCode:12. Integer to Roman

描述:

Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.

题意为 给定一个整数(1-3999)转换为罗马数字输出。

分析:

暴力方式

 // 思路;
1、正常来说根据罗马数字的规则,I(1), V(5), X(10), L(50), C(100), D(500), M(1000),
I II III IV V VI VII VIII IX X (I V X)作为一组 就如同十进制的1 - 10
(X L C)可以表示 10 - 100之间数值 (C D M)表示 100 - 1000数值
2、由于本题限制为(1-3999) 采取比较暴力的方式进行解题:
遍历传入数字,将其各个数位上数字进行罗马数字显示 (1112)M C X I

进制思路

 // 思路;
  >  1. 暴力方式
 // 思路;
1、"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"
分别代表 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1的含义
本质上还是一种和十进制相似的进制。
2、由于本题限制为(1-3999)

代码:

思路一:暴力方式

string intToRoman(int num) {
    string strRomanNum;
    string Roman[4][10] = {
        { "", "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" }
    };
    strRomanNum += Roman[3][((num / 1000) % 10)];
    strRomanNum += Roman[2][((num / 100) % 10)];
    strRomanNum += Roman[1][((num / 10) % 10)];
    strRomanNum += Roman[0][num % 10];
    return strRomanNum;
}

string intToRoman(int num) {
    string strRomanNum;
    string Roman[4][10] = {
        { "", "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" }
    };
    int nTemp = num;
    int nCount = 0;
    while (nTemp > 0)
    {
        if ( nCount > 4 || (4 == nCount && nCount > 4))
        {
            break;
        }
        strRomanNum = Roman[nCount][nTemp % 10] + strRomanNum;
        nCount++;
        nTemp = nTemp / 10;
    }
    return strRomanNum;
}

思路二:进制思路

string intToRoman2(int num)
{
    int value[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
    string strScale[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
    string strRomanNum = "";
    for (int i = 0; num != 0; ++i)
    {
        while (num >= value[i])
        {
            num -= value[i];
            strRomanNum += strScale[i];
        }
    }
    return strRomanNum;
}

备注:

  1. 罗马数字的百科介绍
  2. 罗马数字“ 0”的存在
posted @ 2017-06-14 19:55  suilin  阅读(371)  评论(0编辑  收藏  举报