解题思路:
注意事项:
参考代码:
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int cal(string exp)
{
stack<int> numb;
stack<char> oper;
for (int i = 0; i < exp.length(); i++)
{ //if (isdigit(exp[i]))
//{
// int num = exp[i] - '0';
// numb.push(num);
//}弊端是只能处理个位数
if (isdigit(exp[i]))
{
int num = 0;
while (i < exp.length() && isdigit(exp[i]))
{
num = num * 10 + (exp[i] - '0');
i++;//数字字符是一个一个检测百位数字从个位开始累加
}
numb.push(num);
i--;//因此到这里不用担心不够减
}
else if (exp[i] == '(')
{
oper.push(exp[i]);
}
else if (exp[i] == ')')
{
while (!oper.empty() && oper.top() != '(')
{
int op2 = numb.top();
numb.pop();
int op1 = numb.top();
numb.pop();
char op = oper.top();
oper.pop();
if (op == '+') {
numb.push(op1 + op2);
}
else if (op == '-') {
numb.push(op1 - op2);
}
else if (op == '*') {
numb.push(op1 * op2);
}
else if (op == '/') {
numb.push(op1 / op2);
}
}
oper.pop(); // 弹出 '('
}
else if (exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/')
{
while (!oper.empty() && oper.top() != '(' && (oper.top() == '*' || oper.top() == '/'))
{
int op2 = numb.top();
numb.pop();
int op1 = numb.top();
numb.pop();
char op = oper.top();
oper.pop();
if (op == '+') {
numb.push(op1 + op2);
}
else if (op == '-') {
numb.push(op1 - op2);
}
else if (op == '*') {
numb.push(op1 * op2);
}
else if (op == '/') {
numb.push(op1 / op2);
}
}
oper.push(exp[i]);
}
}
while (!oper.empty()) //这段代码的存在的意义就是进行一些简单的加减法
{//因为上面的while循环把+ - 直接筛选掉了 没有到乘除是进不去的
int op2 = numb.top();
numb.pop();
int op1 = numb.top();
numb.pop();
char op = oper.top();
oper.pop();
if (op == '+') {
numb.push(op1 + op2);
}
else if (op == '-') {
numb.push(op1 - op2);
}
else if (op == '*') {
numb.push(op1 * op2);
}
else if (op == '/') {
numb.push(op1 / op2);
}
}
return numb.top();
}
int main() {
string exp;
while (getline(cin, exp))
{
if (exp == "#")
break;
int result = cal(exp);
cout << result << endl;
}
return 0;
}
0.0分
2 人评分
点我有惊喜!你懂得!浏览:2071 |
程序员的表白 (C语言代码)浏览:1458 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:458 |
哥德巴赫曾猜测 (C语言代码)浏览:994 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:755 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:532 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:994 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:1195 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:1233 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:574 |