LeetCode 012 Integer to Roman

来源:互联网 发布:中兴端口查询mac 编辑:程序博客网 时间:2024/05/16 14:06

【题目】


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) {string roman="";//考虑>1000的情况int baseCount=num/1000; //计算基数的个数num%=1000;     //剩余的值for(int i=0; i<baseCount; i++)//表示千位数    roman+="M";//考虑剩余数>=900的情况,因为900需要特殊处理    if(num>=900){        roman+="CM";        num%=900;    }    //考虑剩余数>=500的情况    if(num>=500){        roman+="D";        num%=500;    }    //考虑剩余数>=400的情况,因为400需要特殊处理    if(num>=400){        roman+="CD";        num%=400;    }    //考虑剩余数>=100的情况    if(num>=100){        baseCount=num/100;        num%=100;        for(int i=0; i<baseCount; i++)            roman+="C";    }    //考虑剩余数>=90的情况, 因为90需要特殊处理    if(num>=90){        roman+="XC";        num%=90;    }    //考虑剩余数>=50的情况    if(num>=50){        roman+="L";        num%=50;    }    //考虑剩余数>=40的情况,因为40需要特殊处理    if(num>=40){        roman+="XL";        num%=40;    }    //考虑剩余数>=10的情况    if(num>=10){        baseCount=num/10;        num%=10;        for(int i=0; i<baseCount; i++)            roman+="X";    }    //考虑剩余数>=9的情况    if(num>=9){        roman+="IX";        num%=9;    }    //考虑剩余数>=5的情况    if(num>=5){        roman+="V";        num%=5;    }    //考虑剩余数>=4的情况,因为4需要特殊处理    if(num>=4){        roman+="IV";        num%=4;    }    //考虑剩余数>=1的情况    if(num>=1){        for(int i=0; i<num; i++)            roman+="I";    }    return roman;    }};


0 0
原创粉丝点击