首页 > 学院 > 开发设计 > 正文

leetcode :Integer to Roman

2019-11-11 01:53:57
字体:
来源:转载
供稿:网友

leetcode

做这道题首先查看了一下罗马数字的表示方式,相比于阿拉伯数字真的麻烦!

题目中也是将输入范围限定到3999.

我第一想到的就是用switch语句。

switch(T x ){

case 1:

语句;break;

case 2:

....

default:

break;

}

代码如下:

class Solution {public:    string intToRoman(int num) {        string ret;        int x1=num%10;        switch(x1){            case 1:            ret='I';            break;            case 2:            ret="II";            break;            case 3:            ret="III";            break;            case 4:            ret="IV";            break;            case 5:            ret='V';            break;            case 6:            ret="VI";            break;            case 7:            ret="VII";            break;            case 8:            ret="VIII";            break;            case 9:            ret="IX";            break;            default:            break;        }        if(num>=10){            int x2=(num/10)%10;            switch(x2){                case 1:                ret='X'+ret;                break;                case 2:                ret="XX"+ret;                break;                case 3:                ret="XXX"+ret;                break;                case 4:                ret="XL"+ret;                break;                case 5:                ret='L'+ret;                break;                case 6:                ret="LX"+ret;                break;                case 7:                ret="LXX"+ret;                break;                case 8:                ret="LXXX"+ret;                break;                case 9:                ret="XC"+ret;                break;                default:                break;            }        }        else            return ret;        if(num>=100){            int x3=(num/100)%10;            switch(x3){                case 1:                ret='C'+ret;                break;                case 2:                ret="CC"+ret;                break;                case 3:                ret="CCC"+ret;                break;                case 4:                ret="CD"+ret;                break;                case 5:                ret='D'+ret;                break;                case 6:                ret="DC"+ret;                break;                case 7:                ret="DCC"+ret;                break;                case 8:                ret="DCCC"+ret;                break;                case 9:                ret="CM"+ret;                break;                default:                break;            }        }        else            return ret;        if(num>=1000){            int x4=(num/1000)%10;            switch(x4){                case 1:                ret='M'+ret;                break;                case 2:                ret="MM"+ret;                break;                case 3:                ret="MMM"+ret;                break;                default:                break;            }        }        else            return ret;        return ret;        }};后面看到别人比较简洁的代码如下:

class Solution {public:	const static string THOUS[];	const static string HUNDS[];	const static string TENS[];	const static string ONES[];    string intToRoman(int num) {		string result;		result += THOUS[(int)(num/1000)%10];		result += HUNDS[(int)(num/100)%10];		result += TENS[(int)(num/10)%10];		result += ONES[num%10];		return result;    }};const string Solution::THOUS[]	= {"","M","MM","MMM"};const string Solution::HUNDS[]	= {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};const string Solution::TENS[]	= {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};const string Solution::ONES[]	= {"","I","II","III","IV","V","VI","VII","VIII","IX"};这个代码采用数组的方法。感觉我的好蠢。。。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表