将给定的数字转换成罗马数字。
所有返回的 罗马数字 都应该是大写形式。
function convert(num) {
var arr = ['I', 'V', 'X', 'L', 'C', 'D', 'M'],
roman = "",
bit = 0;
while (num > 0) {
var tempNum = num % 10;
switch (tempNum) {
case 3:
{
roman = arr[bit] + roman;
tempNum--;
}
case 2:
{
roman = arr[bit] + roman;
tempNum--;
}
case 1:
{
roman = arr[bit] + roman;
break;
}
case 4:
{
roman = arr[bit + 1] + roman;
roman = arr[bit] + roman;
break;
}
case 8:
{
roman = arr[bit] + roman;
tempNum--;
}
case 7:
{
roman = arr[bit] + roman;
tempNum--;
}
case 6:
{
roman = arr[bit] + roman;
tempNum--;
}
case 5:
{
roman = arr[bit + 1] + roman;
break;
}
case 9:
{
roman = arr[bit + 2] + roman;
roman = arr[bit] + roman;
break;
}
default:
{
break;
}
}
bit += 2;
num = Math.floor(num / 10);
}
return roman;
}
console.log(convert(999));
convert(777);
就酱,通过num的除与余再加上循环…
另一种比较好的解法,利用forEach函数和直接列出两个数组…:
forEach:
语法: array.forEach(function(currentValue, index, arr), thisValue)
参数
参数 描述
function(currentValue, index, arr)——-必需。 数组中每个元素需要调用的函数。
thisValue ————————————–可选。传递给函数的值一般用 “this” 值。如果这个参数为空, “undefined” 会传递给 “this” 值
参数 描述
currentValue ———————————-必需。当前元素
index 可选。———————————–当前元素的索引值。
arr ———————————————可选。当前元素所属的数组对象。
function convert(num) {
var nums = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
var romans = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"];
var str = '';
nums.forEach(function(item, index, array) {
while (num >= item) {
str += romans[index];
num -= item;
}
});
return str;
}
convert(777);