LeetCode Integer to Roman

链接: https://oj.leetcode.com/problems/integer-to-roman/


题目上已经说最大出现的整型值为3999,这样就很简单了。

class Solution
{
	public:
		string intToRoman(int num)
		{
			string ans;
			char str_num[8];
			sprintf(str_num,"%d",num);				//the max num is 3999
			int n=strlen(str_num);
			for(int i=0;i<n;i++)
			{
				int t=str_num[i]-'0';
				if(n-i==4)
				{
					for(int j=0;j<t;j++)
						ans+="M";			//1000
				}
				if(n-i==3)
				{
					if(t==9)
						ans+="CM";			//900
					else if(t==4)
						ans+="CD";			//400
					else
					{
						if(t>=5)
						{
							ans+="D";		//500
							for(int j=0;j<t-5;j++)
								ans+="C";		//100
						}
						else
						{
							for(int j=0;j<t;j++)
								ans+="C";		//100
						}
					}

				}
				if(n-i==2)
				{
					if(t==9)
						ans+="XC";		//90
					else if(t==4)
						ans+="XL";		//40
					else
					{
						if(t>=5)
						{
							ans+="L";	//50
							for(int j=0;j<t-5;j++)
								ans+="X";		//10
						}
						else
						{
							for(int j=0;j<t;j++)
								ans+="X";			//10
						}
					}
				}			
				if(n-i==1)
				{
					if(t==9)
						ans+="IX";			//9
					else if(t==4)
						ans+="IV";			//4
					else
					{
						if(t>=5)
						{
							ans+="V";		//5
							for(int j=0;j<t-5;j++)
								ans+="I";
						}
						else
						{
							for(int j=0;j<t;j++)
								ans+="I";
						}
					}
				}
			}
			return ans;
		}
		
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值