LeetCode 012 Integer to Roman

151 篇文章 0 订阅

【题目】


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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值