[题目] Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.
[中文翻译] 给定一个整数,将其转换为罗马数字。 输入保证在1到3999的范围内。
[解题思路] 一开始错了几次,然后发现罗马数字的规则还是挺复杂的。 原本是打算找一下随着数值增加,对应的罗马数字变化规律的,似乎不太靠谱。 好在输入保证在1到3999范围内,对于每一个进制位上,罗马数字的展开还是有规则的,所以照着规则写就好了。 规则见代码就行,这里就不详细叙述了。
[C++代码]
class Solution {public: string intToRoman(int num) { string res; switch (num / 1000) { case 1: res = "M"; break; case 2: res = "MM"; break; case 3: res = "MMM"; break; default: break; } num = num % 1000; switch (num / 100) { case 1: res += "C"; break; case 2: res += "CC"; break; case 3: res += "CCC"; break; case 4: res += "CD"; break; case 5: res += "D"; break; case 6: res += "DC"; break; case 7: res += "DCC"; break; case 8: res += "DCCC"; break; case 9: res += "CM"; break; default: break; } num = num % 100; switch (num / 10) { case 1: res += "X"; break; case 2: res += "XX"; break; case 3: res += "XXX"; break; case 4: res += "XL"; break; case 5: res += "L"; break; case 6: res += "LX"; break; case 7: res += "LXX"; break; case 8: res += "LXXX"; break; case 9: res += "XC"; break; default: break; } num = num % 10; switch (num) { case 1: res += "I"; break; case 2: res += "II"; break; case 3: res += "III"; break; case 4: res += "IV"; break; case 5: res += "V"; break; case 6: res += "VI"; break; case 7: res += "VII"; break; case 8: res += "VIII"; break; case 9: res += "IX"; break; default: break; } return res; }};新闻热点
疑难解答