索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql)
Github: https://github.com/illuz/leetcode
012.Integer_to_Roman (Medium)
链接:
题目:https://oj.leetcode.com/problems/integer-to-roman/
代码(github):https://github.com/illuz/leetcode
题意:
把十进制转为罗马数。
分析:
模拟即可。
“罗马数字的基本符号有I(表示十进制数1),V(表示5),X(表示10),L(表示50),C(表示100),D(表示500),M(表示1000)。” – 罗马数制(百度百科)
代码:
C++:
class Solution {
private:
int val[13] = {
1000, 900, 500, 400,
100, 90, 50, 40,
10, 9, 5, 4,
1
};
string syb[13] = {
"M", "CM", "D", "CD",
"C", "XC", "L", "XL",
"X", "IX", "V", "IV",
"I"
};
public:
string intToRoman(int num) {
string roman;
int i = 0, k;
while (num > 0) {
k = num / val[i];
while (k--) {
roman += syb[i];
num -= val[i];
}
i++;
}
return roman;
}
};
Java:
public class Solution {
private int[] val = {
1000, 900, 500, 400,
100, 90, 50, 40,
10, 9, 5, 4,
1
};
private String[] syb = new String[] {
"M", "CM", "D", "CD",
"C", "XC", "L", "XL",
"X", "IX", "V", "IV",
"I"
};
public String intToRoman(int num) {
StringBuilder roman = new StringBuilder();
int i = 0, k;
while (num > 0) {
k = num / val[i];
while (k-- > 0) {
roman.append(syb[i]);
num -= val[i];
}
i++;
}
return roman.toString();
}
}
Python:
class Solution:
# @return a string
def intToRoman(self, num):
val = [
1000, 900, 500, 400,
100, 90, 50, 40,
10, 9, 5, 4,
1
]
syb = [
"M", "CM", "D", "CD",
"C", "XC", "L", "XL",
"X", "IX", "V", "IV",
"I"
]
roman = ''
i = 0
while num > 0:
for _ in range(num // val[i]):
roman += syb[i]
num -= val[i]
i += 1
return roman