首页 > 代码库 > LeetCode 012 Integer to Roman
LeetCode 012 Integer to Roman
【题目】
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
【题意】
给定一个整数,将其表示成罗马数字
【思路】
罗马数字中只使用如下七个基值字母:M,D,C,L,X,V,I,分别用来表示1000、500、100、50、10、5、1。罗马数组数规则:
基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。
不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。
V 和X 左边的小数字只能用Ⅰ。
L 和C 左边的小数字只能用X。
D 和M 左边的小数字只能用C。
【代码】
class Solution { public: string intToRoman(int num) { // 考虑>1000的情况 string romStr = ""; //转换后的罗马字符串 int fac = num / 1000; //1000的个数 int bas = num % 1000; //表示完千位数后的余数 for(int k=0; k<fac; k++) //有几个1000,就用几个M表示 romStr += "M"; num = bas; //剩余需要转换的数 // 考虑500<x<1000的情况 fac = num / 100; //看看有多少个100需要表示 bas = num % 100; //计算余下的二位数 if(fac == 9){ //注意900使用1000-100来表示,即CM romStr += "CM"; } else if(fac >= 5){ //注意当num>500时,500是一个界,需要先表示500,大于500的部分,在下面处理 romStr += "D"; bas = num % 500; //获得大于500的部分 } else if(fac == 4){ //400需要特殊表示即500-100 romStr += "CD"; } else{ //100,200,300 使用对应个数的C转换 for(int k=0; k<fac; k++) romStr += "C"; } num = bas; // 考虑100-500的情况【这一部分是用于处理上一步>500的部分,如果上一步本身num是小于500的,则这一部分实际上是不起作用的】 fac = num / 100; bas = num % 100; if(fac == 4){ romStr += "CD"; } else{ for(int k=0; k<fac; k++) romStr += "C"; } num = bas; // 考虑50-100的情况 【下面的情况和500-1000的情况类似,不再展开】 fac = num / 10; bas = num % 10; if(fac == 9){ romStr += "XC"; } else if(fac >= 5){ romStr += "L"; bas = num % 50; } else if(fac == 4){ romStr += "XL"; } else{ for(int k=0; k<fac; k++) romStr += "X"; } num = bas; // 考虑10-50的情况 fac = num / 10; bas = num % 10; if(fac == 4){ romStr += "XL"; } else{ for(int k=0; k<fac; k++) romStr += "X"; } num = bas; // 考虑5-10的情况 fac = num; bas = 0; if(fac == 9){ romStr += "IX"; } else if(fac >= 5){ romStr += "V"; bas = num % 5; } else if(fac == 4){ romStr += "IV"; } else{ for(int k=0; k<fac; k++) romStr += "I"; } num = bas; // 考虑0-5的情况 for(int k=0; k<num; k++) romStr += "I"; return romStr; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。