You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

罗马数字计算器开发问题:实现罗马数字算术运算

罗马数字计算器实现方案

问题核心点

  1. 你用objRome.userInput1返回undefined,是因为点语法只能访问对象的固定字面量键名,当键名是变量(比如用户输入的userInput1)时,必须使用方括号语法objRome[userInput1]来访问。
  2. 现有代码缺少阿拉伯数字转回罗马数字的逻辑,也没有对输入的罗马数字有效性做验证。

完整实现代码

// 罗马数字转阿拉伯数字的映射(键名要和用户输入的罗马数字完全匹配)
const romeToArab = {
  I: 1,
  II: 2,
  III: 3,
  IV: 4,
  V: 5,
};

// 阿拉伯数字转罗马数字的映射数组(按数值从大到小排列,方便转换)
const arabToRome = [
  ["V", 5],
  ["IV", 4],
  ["III", 3],
  ["II", 2],
  ["I", 1],
];

// 阿拉伯数字转罗马数字的函数
function convertArabToRome(num) {
  let result = "";
  for (const [romeChar, value] of arabToRome) {
    while (num >= value) {
      result += romeChar;
      num -= value;
    }
  }
  return result;
}

// 获取用户输入
let userInput1 = prompt("请输入第一个数字(阿拉伯或罗马数字):");
let userInput2 = prompt("请输入第二个数字(阿拉伯或罗马数字):");
let mathCalc = prompt("请输入运算符(+、-、*、/):");

// 处理计算逻辑
if (!isNaN(userInput1) && !isNaN(userInput2)) {
  // 阿拉伯数字计算逻辑
  let num1 = Number(userInput1);
  let num2 = Number(userInput2);
  let result;
  switch (mathCalc) {
    case "+":
      result = num1 + num2;
      break;
    case "-":
      result = num1 - num2;
      break;
    case "*":
      result = num1 * num2;
      break;
    case "/":
      result = num1 / num2;
      break;
    default:
      alert("请输入有效的运算符!");
      result = null;
  }
  if (result !== null) {
    console.log(`${num1} ${mathCalc} ${num2} = ${result}`);
  }
} else if (romeToArab[userInput1] && romeToArab[userInput2]) {
  // 罗马数字计算逻辑
  let num1 = romeToArab[userInput1];
  let num2 = romeToArab[userInput2];
  let arabResult;
  switch (mathCalc) {
    case "+":
      arabResult = num1 + num2;
      break;
    case "-":
      arabResult = num1 - num2;
      break;
    case "*":
      arabResult = num1 * num2;
      break;
    case "/":
      arabResult = Math.floor(num1 / num2); // 罗马数字一般为整数,此处取整处理
      break;
    default:
      alert("请输入有效的运算符!");
      arabResult = null;
  }
  if (arabResult !== null && arabResult > 0) { // 罗马数字无0和负数,做合法性判断
    let romeResult = convertArabToRome(arabResult);
    console.log(`${userInput1} ${mathCalc} ${userInput2} = ${romeResult}`);
  } else {
    alert("计算结果无法转换为有效的罗马数字!");
  }
} else {
  alert("请输入两个有效的阿拉伯数字或罗马数字!");
}

关键逻辑说明

  1. 罗马数字转阿拉伯数字:使用romeToArab[userInput1]访问映射对象,同时通过该表达式是否存在值,来验证输入的罗马数字是否合法。
  2. 阿拉伯数字转罗马数字:定义按数值从大到小排列的映射数组,循环遍历数组,每次将当前最大的罗马字符拼接进结果,直到数值减为0,这种方式能正确处理IV(4)这类特殊组合。
  3. 输入区分与验证:通过isNaN判断是否为阿拉伯数字,通过映射对象判断是否为合法罗马数字,同时对运算符和计算结果的有效性做了校验。

内容的提问来源于stack exchange,提问作者mr_facer_man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:33:12