Leecode12_intToRoman

该博客介绍了如何将数字转化为罗马数字,采用贪心算法实现,通过不断除以罗马数字的大值来构造结果。同时提及了一种快速但非标准的方法。
摘要由CSDN通过智能技术生成

题目:给定一个数字,将其转为罗马文字
思路:
直接贪心法,先从最大的M开始,如果num比1000大,那么则除以他后再比,如果除后不大于当前标识符,则除以第二大的900,依次下去,直到除到个位 I。类似于找去商店买东西找零。

代码:

std::string Leecode12_intToRoman(int num) {
	int values[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
	std::string symbols[] = { "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I" };
	std::string result;
	for (int i = 0; i < sizeof(values) / sizeof(values[0]) && num >= 0; i++) {
		while (values[i] <= num) {
			num -= values[i];
			result.append(symbols[i]);
		}
	}
	return result;
}

另外一种更加快但是不正规的方法:

std::string Leecode12_2_intToRoman(int num) {
	std::string thousands[] = { "", "M", "MM", "MMM" };
	std::string hundreds[] = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
	std::string tens[] = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
	std::string ones[] = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
	return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值