问题:
将给定的数字转换成罗马数字。
所有返回的罗马数字都应该是大写形式。
代码:
function convert(num) {
var number = [1000,900,500,400,100,90,50,40,10,9,5,4,1];
var roman_number =["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"];
var answer= '';
number.forEach(function(item,index,array){
while(num >= item){
answer+=roman_number[index] ;
num -= item;//如果num大于number数组中的值时,将这个数对应的罗马数字加到answer中,然后减去这个数,直到结束。
}
});
return answer;
}
解决思路:
首先,了解罗马数字:罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。
如1,2,3都是用‘I’的个数表示,但是4用‘IX’表示,以此类推。
看到这个问题第一个思路是建立二维数组romam[4][10],将1-9,10-90,100-900,1000-9000存入,然后利用余数得到结果。
但是这个方法比较麻烦,这里简化了代码,思路是将这些特殊的数字和罗马数字一一对应的存在数组中,当输入的值num大于某一个数时一直循环下去,直到数组最后。主要是利用了1,2,3这种数的罗马数字是‘I’的倍数的特点。
网友评论