蓝桥杯 算法训练 表达式计算
来源:互联网 发布:路由器限速软件 编辑:程序博客网 时间:2024/06/05 18:26
问题描述
输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。
输入格式
输入一行,包含一个表达式。
输出格式
输出这个表达式的值。
样例输入
1-2+3*(4-5)
样例输出
-4
数据规模和约定
表达式长度不超过100,表达式运算合法且运算过程都在int内进行。
#include <iostream>#include<cstring>#include<cstdio>#include<stack>using namespace std;stack<double>sd;//数字栈stack<char>sc;//字符栈char map[8][8] = {{' ','+','-','*','/','(',')','='},{'+','>','>','<','<','<','>','>'},{'-','>','>','<','<','<','>','>'},{'*','>','>','>','>','<','>','>'},{'/','>','>','>','>','<','>','>'},{'(','<','<','<','<','<','=',' '},{')','>','>','>','>',' ','>','>'},{'=','<','<','<','<','<',' ','='}}; //优先级表格bool isOper(char ch) {//判断是否是运算符 char str[] = "+-*/()=";for(int i=0;str[i];i++)if(ch==str[i])return false;return true;}char check(char ch1, char ch2){//比较运算符优先级 int i,j;for(i=0;i<8;i++){if(map[0][i]==ch1)break;}for(j=0;j<8;j++){if(map[j][0]==ch2)break;}return map[j][i];}double Calu(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;}}void Calulate(char *ch, double *result){sc.push('=');int i=0,j;int sum=0;int doc=0;while(sc.top()!='='||ch[i]!='='){//表达式遇到等号退出循环if(ch[i]>='0'&&ch[i]<='9'||ch[i]=='.')//数字就进数字栈 {sum=0;doc=0;if(ch[i]>='0'&&ch[i]<='9')sum = ch[i]-'0';j=i+1;while(isOper(ch[j]))//循环到一个数字串的结束,也就算遇到运算符停止 {if(ch[j]=='.'){doc=10;j++;continue;}if(!doc){///整数 sum=sum*10+ch[j]-'0';}else{//小数 sum=sum+1.0*(ch[j]-'0')/doc;doc*=10;}j++;}i=j;//把i移到j当前所在的位置sd.push(sum) ;//压入数字栈}else{//如果是运算符 switch(check(ch[i],sc.top()))///判断栈顶运算符,和 当前运算符优先级{case '<':sc.push(ch[i++]);break;case '=':sc.pop();//遇到括号右括号,把栈顶元素弹出,直到左括号(左括号也弹出) i++;break;case '>':char x = sc.top();//获取栈顶元素sc.pop(); //弹出栈顶元素double b = sd.top();sd.pop();double a = sd.top();sd.pop();//计算值*result = Calu(a,b,x);sd.push(*result);break;}}}}int main(){double s; char ch[1010]={0};scanf("%s", ch);ch[strlen(ch)]='=';Calulate(ch, &s);printf("%.0lf\n", s);return 0;}
阅读全文
1 0
- 蓝桥杯算法训练 表达式计算
- 蓝桥杯--算法训练 表达式计算
- 蓝桥杯 算法训练 表达式计算
- 蓝桥杯 算法训练-表达式计算
- 蓝桥杯 算法训练 表达式计算
- 蓝桥杯 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算
- 算法训练 表达式计算 ——蓝桥杯
- 一起来做条纹的背景
- (8)hadoop学习——内部表和外部表
- Bitmap转换为Drawable时,图片大小问题
- 谈谈RDD、DataFrame、Dataset的区别和各自的优势
- mariadb
- 蓝桥杯 算法训练 表达式计算
- 全排列(二)字典序方式与next_permutation的联系
- BRIEF特征点描述算法
- Redis安装及主从配置
- gz和bz2包解压命令
- Well内嵌效果
- 有一种人
- 基于模型的PLC程序设计一 状态机介绍
- 有关set的一点应用