索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql)
Github: https://github.com/illuz/leetcode
题目: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