简单计算器

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 30283    Accepted Submission(s): 10981

Problem Description

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

Input

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

Output

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

Sample Input

 

1 + 2 4 + 2 * 5 - 7 / 11 0

Sample Output

 

3.00 13.36

Source

浙大计算机研究生复试上机考试-2006年

数据结构中的表达式求值问题。

经典做法是使用两个栈,一个运算符栈,一个操作数栈。具体思路为:扫描一遍输入,若为操作数,则直接压人操作数栈;若为运算符,判断当前栈顶运算符与当前扫描的运算符的优先级大小,若当前栈顶运算符优先级高于当前扫描的运算符,只需要进行运算,从操作数栈中弹出两个操作数a,b,与该运算符运算(注意运算顺序),并将运算结果压入操作数栈。最终操作数栈中只有一个最终结果。

代码如下:

#include <cstdio>
#include <iostream>
#include <string.h>
#include <stack>
using namespace std;
stack<double> num;
stack<char> oper;
char str[205];inline double compute(char op,double a,double b)
{switch(op){case '+':return a+b;case '-':return a-b;case '*':return a*b;case '/':return a/b;}
}inline bool priority(char op1,char op2)
{if(op1=='#')    return op2=='#';else if(op1=='+'||op1=='-')    return op2=='+'||op2=='-'||op2=='#';else if(op1=='*'||op1=='/')    return true;
}inline bool is_num(char ch)
{return ch>='0'&&ch<='9';
}int main()
{while(cin.getline(str,205)){int len=strlen(str);if(len==1&&str[0]=='0')    break;str[len]='#';oper.push('#');for(int i=0;i<=len;i++){if(str[i]==' ')    continue;if(is_num(str[i])){double f=0;while(is_num(str[i])){f=f*10+str[i]-'0';i++;}i--;num.push(f);}else{while(priority(oper.top(),str[i])){if(str[i]=='#'&&oper.top()=='#')    break;double a=num.top();num.pop();double b=num.top();num.pop();num.push(compute(oper.top(),b,a));oper.pop();}oper.push(str[i]);}}printf("%.2lf\n",num.top());while(!num.empty())    num.pop();while(!oper.empty())    oper.pop();}
}

还有一种直接模拟比较简单。

#include <cstdio>
double num[205];
double d;
char ch;int main()
{while(~scanf("%lf",&d)){int i=0;num[i]=d;while(true){if(getchar()=='\n')    break;scanf("%c%lf",&ch,&d);if(ch=='*')    num[i]*=d;else if(ch=='/')    num[i]/=d;else if(ch=='+')    num[++i]=d;else num[++i]=-d;}if(i==0&&d==0)    break;double sum=0;while(i>=0)    sum+=num[i--];printf("%.2lf\n",sum);}
}

HDU 1237 简单计算器相关推荐

  1. HDU - 1237简单计算器(输出问题)

    简单计算器 HDU - 1237 题目 题解 代码 题目 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行 ...

  2. HDU - 1237 简单计算器

    Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之 ...

  3. HDU 1237 简单计算器(模拟)

    Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值 Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间 ...

  4. java 杭电1237简单计算器

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  5. 【HDU】1237 简单计算器 (stack)

    http://acm.hdu.edu.cn/showproblem.php?pid=1237 题目很好理解,一开始想用优先队列,但好像有点难实现,用stack比较好实现,遇到" * &quo ...

  6. C++——数据结构 简单计算器

    简单计算器 输入一个只包含 + - * / 运算符且运算数都为非负整数的表达式,请计算该表达式的值. 输入格式: 测试数据有多组.对于每组测试,输入一个字符串(长度不超过200)表示的表达式,整数和运 ...

  7. 模拟一个简单计算器_阅读模拟器的简单介绍

    模拟一个简单计算器 Read simulators are widely being used within the research community to create synthetic an ...

  8. PTA 基础编程题目集 7-12 两个数的简单计算器 C语言

    PTA 基础编程题目集 7-12 两个数的简单计算器 C语言 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式 ...

  9. 7-12 两个数的简单计算器 (C语言)

    7-12 两个数的简单计算器 (10 分)本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次 ...

最新文章

  1. CSS 背景(background)(背景颜色color、背景图片image、背景平铺repeat、背景位置position、背景附着、背景简写、背景透明、链接导航栏综合案例)
  2. python中add函数_如何使用python中的add函数?
  3. C 语言编程 — 管道(Pipe)
  4. ARP欺骗原理与模拟
  5. python入门(1)python的前景
  6. linux 安装vbox增强工具
  7. 您在eXo平台上的第一个Juzu Portlet
  8. 移动端怎么让底部固定_移动端排名应该怎么做?两种匹配移动端实战排名干货分享...
  9. 如何玩转CSS链接(link)知识点?
  10. 关于微信分享的一些心得之recommend.js(直接复制就行)
  11. Angular4.x 安装|创建项目|目录结构|创建组件
  12. 算法不归路之最大子序列(C++版)
  13. 如何查询mysql中执行效率低的sql语句
  14. windows播放声音
  15. 【图像重建】基于matlab GUI霍夫曼图像重建(带面板)【含Matlab源码 1168期】
  16. wireless_tools在android上的移植
  17. android调用虚拟摄像头方法,Android设备虚拟摄像头技术实现
  18. python游戏解法图_python 游戏(记忆拼图Memory_Puzzle)
  19. 军事 - [纪录片]古兵器大揭秘
  20. 4135: [FJOI2015]世界树

热门文章

  1. 共享售货机方案/案列/APP/小程序/网站
  2. 二乌消白酊-----付济华家藏方(未验证)
  3. 石家庄正定县恢复种植 国稻种芯·中国水稻节:河北绘就画卷
  4. 影响IPSec的网络问题
  5. 第六章 存储器层次结构 第四节 高速缓存存储器
  6. openGL 3D图形和openGL简介
  7. java面向对象对象总述
  8. cad是什么?怎样可以快速打开cad文件
  9. 我为什么要学LINUX系统?(转)
  10. python实现房价预测(一)