博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题目1100: 简单计算器
阅读量:4104 次
发布时间:2019-05-25

本文共 1925 字,大约阅读时间需要 6 分钟。

题目描述

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

 


 

输入

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

 


 

输出

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

 


 

样例输入
30 / 90 - 26 + 97 - 5 - 6 - 13 / 88 * 6 + 51 / 29 + 79 * 87 + 57 * 92 0
 


 

样例输出
12178.21
 


 

提示 [+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

 


 

来源

 

 

【思路】:

 

 

/*********************************  *    日期:2013-3-15 *    作者:SJF0115  *    题号: 天勤OJ 题目1100: 简单计算器 *    来源:http://www.acmclub.com/problem.php?id=1100(http://acm.hdu.edu.cn/showproblem.php?pid=1237) *    结果:AC  *    来源:2006年浙江大学计算机及软件工程研究生机试真题 *    总结: **********************************/#include
#include
#include
#include
using namespace std;//算符优先级char Precede(char c1,char c2){ switch(c1){ case '+': case '-': if(c2 == '*' || c2 == '/'){ return '<'; } else{ return '>'; } break; case '*': case '/': return '>'; break; case '#': return '<'; break; }}//运算double Operate(double a,double b,char c){ switch(c){ case '+': return a + b; break; case '-': return a - b; break; case '*': return a * b; break; case '/': return a / b; break; }}int main(){ int i,len,n; char str[1001]; while(gets(str) && strcmp(str,"0") != 0){ stack
OP; stack
Num; //#作为栈底元素 OP.push('#'); len = strlen(str); //输入串要以'#'开始和结束 str[len] = '#'; n = 0; for(i = 0;i < len || OP.top() != '#';){ //跳过空格 if(str[i] == ' '){ i++; } //数字 else if(str[i] >= '0' && str[i] <= '9'){ //提取运算数 while(str[i] >= '0' && str[i] <= '9'){ n = n * 10 + str[i] - '0'; i++; } //数字入栈 Num.push(n); n = 0; } //运算符 else{ //如果栈顶元素小,则把运算符压入栈 if(Precede(OP.top(),str[i]) == '<'){ OP.push(str[i]); i++; } //如果栈顶元素大,则弹出栈顶运算符,再从数字栈弹出两个栈顶数字,完成运算,再把运算结果压入栈。 else if(Precede(OP.top(),str[i]) == '>'){ double b = Num.top(); Num.pop(); double a = Num.top(); Num.pop(); char c = OP.top(); OP.pop(); double result = Operate(a,b,c); Num.push(result); } } }//for printf("%.2f\n",Num.top()); }//while return 0;}

转载地址:http://jkcsi.baihongyu.com/

你可能感兴趣的文章
C#入门
查看>>
查找最大值最小值
查看>>
杨辉三角
查看>>
冒泡排序法
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
16、Memento 备忘录模式
查看>>
Java基础篇(一)
查看>>
数据库
查看>>
mysql update与group by
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>
linux虚拟机安装tar.gz版jdk步骤详解
查看>>
python猜拳游戏
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
python九九乘法表(详解)
查看>>
ESP8266 WIFI数传 Pixhaw折腾笔记
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>
去哪儿一面+平安科技二面+hr面+贝贝一面+二面产品面经
查看>>
element ui 弹窗在IE11中关闭时闪现问题修复
查看>>