LeetCode之12_Integer to Roman

题目原文:

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

Subscribe to see which companies asked this question


题目分析:

将数字转换为罗马数字的表达方式,,范围从1到4000

找到阿拉伯数字与罗马数字之间的对应关系,通过规律进行转换,对5左右的情况做特别的处理


解题代码:


//1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
//
//10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
//
//100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
//
//1000~3000: {"M", "MM", "MMM"}.
// 将数字转换为罗马数字的表达方式,,范围从1到4000


#include <iostream>
#include <string>
using namespace std;


class Solution {
public:
	string intToRoman(int num) {
		int nTemp = 0;
		int nWeght = 0;
		string nRet = "";


		while (num != 0)
		{
			nTemp = num % 10;
			num = num / 10;

			if (nWeght == 0)
			{
				nWeght = 1;
			}
			else
				nWeght = nWeght*10;

			nRet = getRightOrder(nTemp,nWeght)+nRet ;
		}

		return nRet;
	}


	//输入某位的数字和对应的权重,返回其对应的罗马数字
	string getRightOrder(int nNum, int nWeight)
	{
		string strRet;

		if (nNum == 9)
		{
			strRet = getRoman(1*nWeight,1) + getRoman(nWeight*10,1);
		}
		else if (nNum >= 5)
		{
			strRet = getRoman(5*nWeight,1) + getRoman(nWeight,nNum-5);
		}
		else if (nNum == 4)
		{
			strRet = getRoman(nWeight,1) + getRoman(5*nWeight,1);
		}
		else if (nNum > 0)
		{
			strRet = getRoman(nWeight,nNum);
		}
		else 
			strRet = "";


		return strRet;
	}


	//要表达的数字及重复的次数
	string getRoman(int nsize ,int nRep)
	{
		string sRet = "";
		string sOut = "";
		switch(nsize)
		{
		case 1:
			sRet = "I";
			break;
		case 5:
			sRet = "V";
			break;
		case 10:
			sRet = "X";
			break;
		case 50:
			sRet = "L";
			break;
		case 100:
			sRet = "C";
			break;
		case 500:
			sRet = "D";
			break;
		case 1000:
			sRet = "M";
			break;

		}
		
		for (int i=0; i<nRep; i++)
		{
			sOut= sOut + sRet;
		}

		return sOut;
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值