# 12. Integer to Roman 整数转罗马数字

• 作者： 负雪明烛
• id： fuxuemingzhu
• 个人博客：http://fuxuemingzhu.cn/open in new window
• 个人公众号：负雪明烛
• 本文关键词：roman, 罗马数字，题解，leetcode, 力扣，Python, C++, Java

@TOC

## # 题目描述

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

``````Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
``````

For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:

• I can be placed before V (5) and X (10) to make 4 and 9.
• X can be placed before L (50) and C (100) to make 40 and 90.
• C can be placed before D (500) and M (1000) to make 400 and 900.

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

Example 1:

``````Input: 3
Output: "III"
``````

Example 2:

``````Input: 4
Output: "IV"
``````

Example 3:

``````Input: 9
Output: "IX"
``````

Example 4:

``````Input: 58
Output: "LVIII"
Explanation: L = 50, V = 5, III = 3.
``````

Example 5:

``````Input: 1994
Output: "MCMXCIV"
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
``````

## # 解题方法

C++代码如下：

``````class Solution {
public:
string intToRoman(int num) {
string res = "";
vector<int> val{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
vector<string> str{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
for (int i = 0; i < val.size(); ++i) {
while (num >= val[i]) {
res += str[i];
num -= val[i];
}
}
return res;
}
};
``````

Java代码如下：

``````package com.fuxuemingzhu.integertoroman;
/**
* Given an integer, convert it to a roman numeral.
* <p/>
* Input is guaranteed to be within the range from 1 to 3999.
* <p/>
* Created by fuxuemingzhu on 2015/9/4.
*/
public class Solution {

static int value[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
static String symbol[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
/**
* 先存储好特定的数字，将输入的数字除以最大的特定数字，得到有几个最高为的数字，剩下的依次从次大数往下推。
*
*/
public static String intToRoman(int num) {
String ret = "";
int taps;
for (int i = 0; i < value.length; i++) {
taps = num / value[i];
if (taps >= 1) {
for (int j = 0; j < taps; j++) {
ret += symbol[i];
}
}
num -= taps * value[i];
}
return ret;
}
}
``````

http://blog.csdn.net/ljiabin/article/details/39968583open in new windowhttp://blog.csdn.net/havenoidea/article/details/11848921open in new window http://www.cnblogs.com/grandyang/p/4123374.html

## # 日期

2015/9/4 16:40:35 2019 年 1 月 25 日 —— 这学期最后一个工作日