【Codewars】<3kyu>Calculator
阿新 • • 發佈:2020-12-23
技術標籤:CodewarsCodewarsjsjavascriptalgorithm字串
題目:
Create a simple calculator that given a string of operators (), +, -, *, / and numbers separated by spaces returns the value of that expression
這個題目要我們實現一個簡單的計算器,計算出帶加減乘除的字串運算後的值。
例子:
Calculator().evaluate("2 / 2 + 3 * 4 - 6") # => 7
題解一:
// 方法一
const Calculator = function() {
this.evaluate = string => {
// do code here
var arr = string.split(' ');
// 先進行乘除
for(let i=0;i<arr.length;i++){
if(arr[i] === '*'){
arr[i+1] = arr[i-1] * arr[i+1]
arr.splice(i- 1,2)
i=i-2;
}else if(arr[i] === '/'){
arr[i+1] = arr[i-1] / arr[i+1]
arr.splice(i-1,2)
i=i-2;
}
}
// 再進行加減
for(let i=0;i<arr.length;i++){
if(arr[i] === '+'){
arr[ i+1] = parseFloat(arr[i-1]) + parseFloat(arr[i+1])
arr.splice(i-1,2)
i=i-2;
}else if(arr[i] === '-'){
arr[i+1] = arr[i-1] - arr[i+1]
arr.splice(i-1,2)
i=i-2;
}
}
return arr.join("");
}
};
題解二:
// 方法二
const Calculator = function() {
this.operation = (a, b, operator) => {
switch (operator) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
}
this.evaluate = (str) => {
const args = str.split(' ');
['/', '*', '-', '+'].forEach((op) => {
while ((i = args.indexOf(op)) !== -1) {
args[i - 1] = this.operation(+args[i - 1], +args[i + 1], op);
args.splice(i, 2);
}
})
return +args[0];
}
};