您的位置:首页 > 其它

Integer to Roman (整数转为罗马数字)

2014-03-27 14:32 513 查看
题目原型:

Given an integer, convert it to a roman numeral.

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

基本思路:

题目的意思是给你你一个整数然后把这个整数转为罗马数字形式。例如:1899->MDCCCXCIX,注意:I表示1,V表示5,X表示10,L表示50,C表示100,D表示500,M表示1000.题目比较简单:

public String intToRoman(int num)
{
StringBuffer strbuf = new StringBuffer();
Map<Integer,String> map = new HashMap<Integer,String>();
map.put(1 , "I");
map.put(5 , "V");
map.put(10 , "X");
map.put(50 , "L");
map.put(100 , "C");
map.put(500 , "D");
map.put(1000 , "M");

while(num>0)
{
//求得第一個數字
String numStr = new Integer(num).toString();
int firstNum =	numStr.charAt(0)-'0';
int elseNum = 0;//去除第一个数后的余数
int lenOfelseNum = numStr.length()-1;//余数的长度
if(num>=10)
elseNum = Integer.parseInt(numStr.substring(1));
int times = (int)Math.pow(10, lenOfelseNum);//倍数
if(map.containsKey(firstNum*times))
{
strbuf.append(map.get(firstNum*times));
}
else if(firstNum<4)
{
while(firstNum>0)
{
strbuf.append(map.get(1*times));
firstNum--;
}
}
else if(firstNum==4||firstNum==9)
strbuf.append(map.get(1*times)).append(map.get((firstNum+1)*times));
else if(firstNum>5&&firstNum<9)
{
strbuf.append(map.get(5*times));
firstNum-=5;
while(firstNum>0)
{
strbuf.append(map.get(1*times));
firstNum--;
}
}

num = elseNum;
}
return strbuf.toString();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: