javascript - JavaScript 罗马数字转换器
问题描述
我无法正确理解此解决方案。我理解了数组声明部分,但我不确定 while 循环中发生了什么。
function roman(num) {
var decimalValue = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
var romanNumeral = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];
var romanized = '';
for (var index = 0; index < decimalValue.length; index++) {
while (decimalValue[index] <= num) {
romanized += romanNumeral[index];
num -= decimalValue[index];
}
}
return romanized;
}
解决方案
While 循环从索引零开始到最后一个进行比较,并比较传入的 num 的值是否小于十进制值数组索引处的值,如果是,它将在该处附加(连接)罗马数字随机化的特定索引并从发送的 num 中减去十进制中的等效数字(改变 num 变量)。然后它检查 num 是否仍然大于该特定索引处的值,指示十进制。以 3002 为例。
- 首先检查具有 1000 的索引 0 是否小于 3002 true
- 在位置索引处将随机化设置为罗马数字。在这种情况下,我们有“M”,然后从 num(3002) 中减去位置索引处的小数,我们现在有 num = 2002。
- while 循环再次迭代并检查是否比 2002 少 1000?是的,它会再次执行while循环的主体。
- 附加(将位置索引处的值(尚未更改)连接到随机化变量,这种情况下索引仍然为零,所以我们附加'M'现在随机化是'MM'。从num(中减去位置索引(0)处的小数) 2002) 我们现在有 num = 1002。
- 迭代while循环并检查decimalValue数组的index(0)位置的十进制值是否小于num(1002),在这种情况下为真。像以前一样执行循环。附加(将位置索引(尚未更改)处的值连接到随机化变量,这种情况下索引仍然为零,所以我们附加'M'现在随机化是'MMM'。从num(中减去位置索引(0)处的小数) 1002) 我们现在有 num = 2。
- 迭代while循环并检查decimalValue数组的index(0)位置的十进制值是否小于num(2),
false
在这种情况下。停止执行循环并在 for 循环中增加 index 的值并再次进行检查。直到你到达终点。
推荐阅读
- java - 使用 editText gettext 更改 Android 操作栏标题文本
- javascript - 搜索脚本的问题我无法从导航栏获取良好的属性到 vue.js 中的 searchcomponent
- reactjs - 如何在反应中使用复选框形式?
- javascript - 在这段代码中,push 和 Shift 是如何一起使用的?
- python - 将数据从 Oracle 数据库导入 Python 环境时
- ruby-on-rails - 为什么我的 Rails 助手不能使用 shopify_app gem?
- git - Github 提交或合并修改/创建文件
- java - 如何在此字符串中提取键的值
- java - 有状态的 Rsocket 应用程序
- api - 如何管理两个身份验证系统:有状态和无状态(缓存)