灵异事件
本帖最后由 claws0n 于 2018-10-22 18:37 编辑大佬们好,我最近在学习数据结构,栈的过程中遇到了一个灵异事件。
我用C++写了一个后缀表达式计算器,但计算时,发现加、减、除都没有问题,但用到乘法时发现这玩意算出来是正确答案,但压入栈中的却是错误答案,而且错得好像……
算了,演示一下吧。
输入:25 5 *
输出:5.00
输入:25 2 *
输出:12.50
输入:81 9 *
输出:9.00
代码如下
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
typedef string::iterator strit;
double calc(double x, double y, char op)
{
double result;
switch (op)
{
case '+':
result = x + y;
break;
case '-':
result = x - y;
break;
case '*':
result = x * y;
case '/':
result = x / y;
}
return result;
}
int main()
{
int t;
string str;
stack<double> st;
double a, b, c;
getline(cin, str);
for (strit i = str.begin(); i != str.end(); ++i)
{
if (*i >= '0' && *i <= '9')
{
t = 0;
for (; *i >= '0' && *i <= '9'; ++i)
{
t = t * 10 + *i - '0';
}
i--;
st.push((double)t);
}
else if(*i == '+' || *i == '-' || *i == '*' || *i == '/')
{
b = st.top();
st.pop();
a = st.top();
st.pop();
c = calc(a, b, *i);
st.push(c);
}
}
printf("%.2f\n", st.top());
return 0;
}
望大佬指点,代码写的不好的话也请指出,谢谢 已经搞定了,switch里面少写了两个break{:10_266:} 嘿嘿,细心一点 你最好再改进一下,把输入格式改成<操作数1><运算符><操作数2> TCY 发表于 2018-10-24 20:48
你最好再改进一下,把输入格式改成
嗯,正准备做 细心一点就好啦
页:
[1]