九度 1101 - 字符串处理 - 计算表达式
来源:互联网 发布:尖锐湿疣不治知乎 编辑:程序博客网 时间:2024/09/21 09:02
根据我的通过来看,首先这道题里面没有小数,如果存在除不尽的情况,也是按取整来算。
本题建立了两个栈,一个存储数字的数字栈,一个存储加减乘除的符号栈。在处理字符串的时候,每次找到一个数字时,放进一个string的临时变量里,因为会存在十位以上的情况;每次找到一个符号时,首先将string变量转int放入数字栈,然后检查符号栈的栈顶符号是否为乘或者除,如果是就从符号栈弹出顶,从数字栈弹出两个数,计算后放回数字栈。这样到处理完字符串时,我们的符号栈内只剩下加和减了。此时不断弹出符号与数字进行计算,直至符号栈为空。此时数字栈的栈顶就是答案。
#include<iostream>#include<stack>#include<string>#include <stdlib.h>using namespace std;string data;string str="";int main(){while(cin>>data){data+='#'; //为了处理到最后一个数字时,仍能继续处理,我们加一个#作为字符串结尾。stack<int>n;stack<char>f;for(int i=0;data[i];i++){if(data[i]<='9'&&data[i]>='0'){str+=data[i];}else{n.push(atoi(str.c_str()));str="";if(!f.empty()){char tmp=f.top();if(tmp=='*'){f.pop();int a=n.top();n.pop();int b=n.top();n.pop();n.push(a*b);}else if(tmp=='/'){f.pop();int a=n.top();n.pop();int b=n.top();n.pop();n.push(b/a);}}if(data[i]!='#')f.push(data[i]);}}while(!f.empty()){char tmp=f.top();if(tmp=='+'){f.pop();int a=n.top();n.pop();int b=n.top();n.pop();n.push(a+b);}else if(tmp=='-'){f.pop();int a=n.top();n.pop();int b=n.top();n.pop();n.push(b-a);}}cout<<n.top()<<endl;}return 0;}
0 0
- 九度 1101 - 字符串处理 - 计算表达式
- 九度1101:计算表达式
- 九度OnlineJudge-计算表达式(1101)
- 九度 题目1101:计算表达式
- 九度OJ-1101-计算表达式
- 九度OJ 1101 计算表达式
- 九度oj 1101 计算后缀表达式
- 九度OJ题目1101:计算表达式
- 九度OJ 1101:计算表达式 (DP)
- 九度+计算表达式模拟+scanf读取数据的灵活运用和运算级的处理
- 如何计算字符串表达式
- 计算字符串表达式
- 字符串表达式计算
- 字符串表达式的计算
- 字符串输入计算表达式
- 计算 字符串数学表达式
- 字符串表达式的计算
- java字符串表达式计算
- require与include的区别
- mac mysql
- 架构与系统设计资料集合TODO
- 解决jar包依赖:Spring IO platform推出bom
- CodeForces 555C Case of Chocolate(STL:map的使用)
- 九度 1101 - 字符串处理 - 计算表达式
- 初步篇11算术运算符与算术表达式项目5-坐标转换
- 算法初探
- 1077. Kuchiguse (20)
- 9.11排序与查找(三)——给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素
- hdoj 2795 Billboard 【线段树 单点更新 + 维护区间最大值】
- SQL Server 维护计划备份主分区
- web service调用方式
- 修改主题Theme中默认颜色