首页 > 试题广场 >

四则运算

[编程题]四则运算
  • 热度指数:135105 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于输入的表达式,保证其形式合法、计算过程中全程合法、计算过程中不需要使用到实数、结果 {\rm ans} 满足 -10^3 \leqq {\rm ans} \leqq 10^3 。直接输出计算结果。

\hspace{15pt}保证表达式字符串由 0-9 的数字、加法 \texttt{`+'} 、减法 \texttt{`-'} 、乘法 \texttt{`*'} 、除法 \texttt{`/'} 、小括号 \texttt{`('},\texttt{`)'} 、中括号 \texttt{`['},\texttt{`]'} 、大括号 \texttt{`\{'},\texttt{`\}'} 组成,且运算符之间没有空格。

输入描述:
\hspace{15pt}输入一个长度为 1 \leqq {\rm len}(s) \leqq 10^3 、由题面所述符号构成的字符串,代表一个表达式。


输出描述:
\hspace{15pt}输出一个整数 \rm ans ,代表计算的答案。满足 -10^3 \leqq {\rm ans} \leqq 10^3
示例1

输入

3+2*{1+2*[-4/(8-6)+7]}

输出

25

说明

\hspace{15pt}在这个样例中,计算过程为:\begin{array}{ll}<br />& 3+2\times\big\{1+2\times{[-4 \div (8-6)+7]}\big\} \\<br />= & 3 + 2 \times \big\{1 + 2 \times [-4 \div {\color{orange}{\bf2}} + 7]\big\} \\<br />= & 3 + 2 \times \big\{1 + 2 \times [{\color{orange}{\bf{-2}}} + 7]\big\} \\<br />= & 3 + 2 \times \big\{1 + 2 \times {\color{orange}{\bf5}}\big\} \\<br />= & 3 + 2 \times \big\{1 + {\color{orange}{\bf10}}\big\} \\<br />= & 3 + 2 \times {\color{orange}{\bf11}} \\<br />= & 3 + {\color{orange}{\bf22}} \\<br />= & {\color{orange}{\bf25}}<br />\end{array}
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
    const tokens = line.replace('{', '(').replace('}', ')').replace('[','(').replace(']',')');
    console.log(eval(tokens));
});

发表于 2021-11-25 18:29:50 回复(0)
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})
rl.on('line',(line)=>{
    console.log(eval(line.replace('{','(').replace('}',')')))
})

发表于 2021-09-04 15:04:14 回复(0)
const readLine = require('readline')
const rl = readLine.createInterface({
  input: process.stdin,
  output: process.stdout
})
function prt(params) {
  console.log(params)
}
rl.on('line', (line) => {
  prt(eval(line))
})

发表于 2021-08-19 12:54:33 回复(0)
line=line.replace(new RegExp('{','g'),"(").
    replace(new RegExp('}','g'),")").
    replace(/\[/g,"(").
    replace(/\]/g,")")
    console.log(eval(line))

发表于 2021-08-05 23:58:18 回复(0)
let str
while(str = readline()) {
    console.log(eval(str));
}
发表于 2021-07-04 11:22:31 回复(0)
解法:eval()方法
var str = readline();
console.log(eval(str))
编辑于 2021-02-28 11:58:38 回复(0)
const line = readline()
const result = line.replace('{', '(').replace('}',')')
console.log(eval(result))

发表于 2020-10-19 15:46:49 回复(0)
javascript 不用 eval() 解法,正则表达式绕了我好久,欢迎改进。

while(line=readline()){
    var str = line.trim();
    var str = str.replace(/[\{\[]/g,"(").replace(/[\}\]]/g,")");

    console.log(cal(str));
}
function cal(str){
    var reg = /\(([^\(\)]+)\)/g;        
    while(reg.test(str)){
        str = str.replace(reg,function($1,$2){
            return cal2($2);
        })
    }
    return cal2(str); 
}
function cal2(str){
    var arr = [];
    var sub = "";
    for(var i = 0; i < str.length; i++){
        if(/[\+\*\/-]/.test(str[i]) && !(/[\+\*\/-]/.test(str[i-1]))){
            arr.push(sub);
            sub = "";
            arr.push(str[i]);
        }else{
            sub += str[i];
        }
    }
    arr.push(sub);
    var temp = [];
    var result = [];
    for(var i = 0; i < arr.length; i++){
        if(/[\*\/]/.test(arr[i])){
            var num1 = Number(temp.pop());
            var num2 = Number(arr[i+1]);
            if(arr[i] == "*"){
                temp.push(num1*num2);
            }else{
                temp.push(num1/num2);
            }
            i++;
        }else{
            temp.push(arr[i]);
        }
    }
    for(var i = 0; i < temp.length; i++){
        if(/[\+-]/.test(temp[i])){
            var num1 = Number(result.pop());
            var num2 = Number(temp[i+1]);
            if(temp[i] == "+"){
                result.push(num1+num2);
            }else{
                result.push(num1-num2);
            }
            i++;
        }else{
            result.push(temp[i]);
        }
    }
    return result[0];
}
发表于 2018-08-06 20:50:22 回复(1)