[LeetCode] 012. Integer to Roman (Medium) (C++/Java/Python)

索引:[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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值