赋值语句需要一个能理解平方数的计算器。为了简化表示法,平方数表示为X ^,其中X是要求平方的数。整个过程接受多个等式。例如,如果用户输入:
5 ^; 1000 + 6 ^-5 ^+1;
预计返回人数为二十五一千零十二人。
这是我的想法
function calculate() {
let input = document.getElementById("input").value;
let expressions = input.split(";").filter(Boolean); // Split input into expressions
let output = "";
for (let expr of expressions) { // Iterate over expressions
let tokens = expr.split(/(\+|\-|\*|\/|\^)/g).filter(Boolean); // Split expression into tokens (numbers and operators)
let result = parseInt(tokens[0]); // Initialize result to the first number
let operator = null;
for (let i = 1; i < tokens.length; i += 2) { // Iterate over operators
if (tokens[i] === "^" && tokens[i + 1] === "") {
result = Math.pow(result, 2);
continue; // Skip to next iteration
} else if (tokens[i].match(/[\+\-\*\/\^]/)) {
operator = tokens[i]; // Otherwise, it's a regular operator
}
if (operator === "^") {
result = Math.pow(result, 2);
} else if (operator === "+") {
result += parseInt(tokens[i + 1]);
} else if (operator === "-") {
result -= parseInt(tokens[i + 1]);
} else if (operator === "*") {
result *= parseInt(tokens[i + 1]);
} else if (operator === "/") {
result /= parseInt(tokens[i + 1]);
}
}
output += result + "<br>"; // Append result to output with a line break
}
document.getElementById("result").innerHTML = output; // Display output
}
就目前情况而言,前两个方程的输出为:25 1024206744962
任何帮助将不胜感激。
5 ^; 1000 + 6 ^-5 ^+1;
预计返回25 1012
但是,它正在返回25 1024206744962
从其他地方告诉我的,作为一个开始,我的输出被初始化为一个字符串而不是一个数字,因此疯狂的输出。我似乎不能得到足够的调整来纠正它。
1条答案
按热度按时间8hhllhi21#
你的数学表达式遇到了运算顺序的问题,要制作这种数学解析器,你需要考虑
2 + 3 * 4 = 14
和(2 + 3) * 4 = 20
之间的差异。我建议这样实现:
这个想法是你多次循环你的输入令牌,只处理某些运算。如果你想要正确的数学,你必须在看加法和减法之前处理乘法和除法。