整数转罗马数字
hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧!
function intToRoman(num) {
// 定义罗马数字符号和对应的整数值,按照从大到小的顺序排列
const values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
const symbols = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"];
// 初始化一个空字符串,用于存储最终的罗马数字结果
let result = '';
// 遍历值和符号数组
for (let i = 0; i < values.length; i++) {
// 当输入的数字 num 大于等于当前值时
while (num >= values[i]) {
// 将对应的罗马数字符号添加到结果字符串中
result += symbols[i];
// 从输入数字中减去当前值
num -= values[i];
}
}
return result;
}
// 测试示例
const num = 3749;
console.log(intToRoman(num));
代码解释
整体思路
要将一个整数转换为罗马数字,我们可以使用贪心算法。首先,我们需要准备好罗马数字符号和它们对应的整数值,按照从大到小的顺序排列。然后,从最大的值开始尝试,如果输入的整数大于或等于当前的值,就将对应的罗马数字符号添加到结果字符串中,并从输入的整数中减去该值,重复这个过程直到输入的整数变为 0。
代码步骤分析
定义数组:
values 数组存储了罗马数字符号对应的整数值,按照从大到小的顺序排列,包含了特殊的减法形式对应的数值(如 900、400 等)。
symbols 数组存储了对应的罗马数字符号,与 values 数组中的值一一对应。
初始化结果字符串:
result 初始化为空字符串,用于存储最终的罗马数字表示。
遍历和转换:
使用 for 循环遍历 values 数组。
对于每个值,使用 while 循环检查输入的整数 num 是否大于或等于该值。如果是,则将对应的罗马数字符号添加到 result 字符串中,并从 num 中减去该值。
重复这个过程,直到 num 小于当前值,然后继续处理下一个较小的值。
返回结果:
当遍历完所有的值后,result 字符串中就存储了最终的罗马数字表示,将其返回。