鱼C论坛

 找回密码
 立即注册
查看: 1432|回复: 5

灵异事件

[复制链接]
发表于 2018-10-22 18:29:51 | 显示全部楼层 |阅读模式
50鱼币
本帖最后由 claws0n 于 2018-10-22 18:37 编辑

大佬们好,我最近在学习数据结构,栈的过程中遇到了一个灵异事件。

我用C++写了一个后缀表达式计算器,但计算时,发现加、减、除都没有问题,但用到乘法时发现这玩意算出来是正确答案,但压入栈中的却是错误答案,而且错得好像……

算了,演示一下吧。

输入:25 5 *
输出:5.00
输入:25 2 *
输出:12.50
输入:81 9 *
输出:9.00

代码如下
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <stack>

  4. using namespace std;

  5. typedef string::iterator strit;

  6. double calc(double x, double y, char op)
  7. {
  8.         double result;
  9.         switch (op)
  10.         {
  11.         case '+':
  12.                 result = x + y;
  13.                 break;
  14.         case '-':
  15.                 result = x - y;
  16.                 break;
  17.         case '*':
  18.                 result = x * y;
  19.         case '/':
  20.                 result = x / y;
  21.         }
  22.         return result;
  23. }

  24. int main()
  25. {
  26.         int t;
  27.         string str;
  28.         stack<double> st;
  29.         double a, b, c;
  30.        
  31.         getline(cin, str);
  32.        
  33.         for (strit i = str.begin(); i != str.end(); ++i)
  34.         {
  35.                 if (*i >= '0' && *i <= '9')
  36.                 {
  37.                         t = 0;
  38.                         for (; *i >= '0' && *i <= '9'; ++i)
  39.                         {
  40.                                 t = t * 10 + *i - '0';
  41.                         }
  42.                         i--;
  43.                         st.push((double)t);
  44.                 }
  45.                 else if(*i == '+' || *i == '-' || *i == '*' || *i == '/')
  46.                 {
  47.                         b = st.top();
  48.                         st.pop();
  49.                         a = st.top();
  50.                         st.pop();
  51.                         c = calc(a, b, *i);
  52.                         st.push(c);
  53.                 }
  54.         }
  55.         printf("%.2f\n", st.top());
  56.         return 0;
  57. }
复制代码


望大佬指点,代码写的不好的话也请指出,谢谢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-22 18:35:59 | 显示全部楼层
已经搞定了,switch里面少写了两个break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-22 20:59:02 | 显示全部楼层
嘿嘿,细心一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-24 20:48:20 | 显示全部楼层
你最好再改进一下,把输入格式改成<操作数1><运算符><操作数2>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-24 21:09:32 | 显示全部楼层
TCY 发表于 2018-10-24 20:48
你最好再改进一下,把输入格式改成

嗯,正准备做
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-25 21:02:43 | 显示全部楼层
细心一点就好啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 11:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表