leetcode :Integer to Roman

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"};

这个代码采用数组的方法。感觉我的好蠢。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值