四则运算,简单算术题(如:1*2+3/3*4+8)

1.简单的算术算法:如:1*2+3/3*4+8

   上面的算术较为简单,没有括号,只是一般的运算,现在唯一要做的就是弄清楚优先级, 在加上数据结构中 栈的辅助就可以实现了

 

   基本算法如下:需要有个两个栈 一个用来存放数据,一个用来存放运算符,如果是数字就放入数据栈,如果为运算符,就需要进行优先级的比较,优先级与当前栈顶的运算符优先级低的话,就压入栈,如果高于栈顶运算符的优先级,就需要计算下符号两旁的数据,得出结果,把结果在放入数据栈,运算符的栈顶符号不变,如运算符低于栈顶的运算符,就需要先将数据栈的末尾两个数进行计算,依次这样最终运算符中的栈的优先级一样,最后直接依次读取数据栈,运算符栈进行由前往后进行计算就可以。

 

2.比较复杂的算术题 1*(2+3)/(3*4+8)

 基本原理与上面一样,依次计算出括号里面的,压入数据栈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的C++程序,可以计算没有括号的四则混合运算算术题: ```c++ #include <iostream> #include <stack> #include <string> using namespace std; // 判断是否为运算符 bool isOperator(char op) { return op == '+' || op == '-' || op == '*' || op == '/'; } // 计算两个数的结果 int calculate(int a, int b, char op) { switch (op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return a / b; default: return 0; } } // 计算四则混合运算表达式的结果 int calculateExpression(string exp) { stack<int> s; // 存放数字的栈 int num = 0; // 当前数字 char op = '+'; // 当前运算符 for (int i = 0; i < exp.length(); i++) { char c = exp[i]; if (isdigit(c)) { // 如果当前字符是数字 num = num * 10 + (c - '0'); // 计算当前数字 } if (isOperator(c) || i == exp.length() - 1) { // 如果当前字符是运算符,或者是表达式的最后一个字符 // 根据当前运算符,计算上一个数字和当前数字的结果,并压入栈中 if (op == '+') { s.push(num); } else if (op == '-') { s.push(-num); } else if (op == '*') { int prev = s.top(); s.pop(); s.push(prev * num); } else if (op == '/') { int prev = s.top(); s.pop(); s.push(prev / num); } // 更新当前运算符和数字 op = c; num = 0; } } // 计算栈中所有数字的和,即为表达式的结果 int result = 0; while (!s.empty()) { result += s.top(); s.pop(); } return result; } int main() { string exp = "1+2*3-4/2"; // 待计算的表达式 int result = calculateExpression(exp); cout << exp << " = " << result << endl; // 输出结果 return 0; } ``` 该程序使用栈来计算四则混合运算表达式的结果,具体的计算过程如下: 1. 定义一个存放数字的栈s,以及三个变量num、op、result。 2. 遍历表达式中的每个字符,如果当前字符是数字,则将其加入到num中。 3. 如果当前字符是运算符,或者是表达式的最后一个字符,则根据当前运算符,计算上一个数字和当前数字的结果,并压入栈s中。 4. 遍历完表达式中的所有字符后,计算栈s中所有数字的和,即为表达式的结果。 例如,对于表达式"1+2*3-4/2",程序的计算过程如下: 1. 遍历字符'1',将其加入num中。 2. 遍历字符'+',根据前面的运算符'+',将num的值1压入栈s中。 3. 遍历字符'2',将其加入num中。 4. 遍历字符'*',根据前面的运算符'+',将num的值2和栈s中的值1相乘得到2,将2压入栈s中。 5. 遍历字符'3',将其加入num中。 6. 遍历字符'-',根据前面的运算符'*',将num的值3和栈s中的值2相乘得到6,将6压入栈s中。 7. 遍历字符'4',将其加入num中。 8. 遍历字符'/',根据前面的运算符'-',将num的值4除以2得到2,将2压入栈s中。 9. 遍历到表达式的结尾,计算栈s中所有数字的和,得到表达式的结果4。 因此,该程序输出的结果为"1+2*3-4/2 = 4"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值