计算表达式(加减乘除括号小数立方)
2020-06-01 05:25
621 查看
今天用c++在老师要求的加减基础上写了一个简易的表达式计算器,加入了括号,小数,还有立方。 新手上路,有许多不足之处,望体谅。下面直接上代码吧!
#include<iostream> #include<string> #include<math.h> using namespace std; char c[10001]; int i;//当前锁定坐标 int len;//表达式长度 ;double num(int &i,bool isminus/*判断正负*/){ double sum=0; bool isdot=false; double temp=0.1; while(c[i]>='0' && c[i]<='9'){ if(!isdot){ sum=sum*10+c[i]-'0'; }else{ sum=sum+(c[i]-'0')*temp; temp/=10; } i++; if(c[i]=='.'){ i++; isdot=true; } } if(isminus){ sum*=-1; } return sum; } double walk(int &i){ double stack[1000]; int top=0; while(c[i]!=')' && i<len){ if(c[i]=='+'){ i++; if(c[i]!='('){ stack[top++]=num(i, false); }else{ i++; stack[top++]=walk(i); } continue; } if(c[i]=='-'){ i++; if(c[i]!='('){ stack[top++]=num(i,true); }else{ i++; stack[top++]=walk(i)*(-1); } continue; } if(c[i]=='*'){ i++; if(c[i]=='('){ i++; stack[top-1]*=walk(i); } else{ stack[top-1]*=num(i,false); } continue; } if(c[i]=='/'){ i++; if(c[i]=='('){ i++; stack[top-1]/=walk(i); }else{ stack[top-1]/=num(i,false); } continue; } if(c[i]=='^'){ i++; if(c[i]=='('){ i++; stack[top-1]=pow(stack[top-1],walk(i)); }else{ stack[top-1]=pow(stack[top-1], num(i, false)); } continue; } if(c[i]=='('){ i++; stack[top++]=walk(i); continue; } if(c[i]<='9' && c[i]>='0'){ stack[top++]=num(i, false); continue; } } top-=1; i++; for(int j=top-1;j>=0;j--){ stack[j]+=stack[j+1]; } top=0; //这里防止出现-(xxx)^xxx的情况,不加的话直接就把负号也一起立方了 if(c[i]=='^'){ i++; if(c[i]=='('){ i++; stack[top]=pow(stack[top],walk(i)); }else{ stack[top]=pow(stack[top], num(i, false)); } } return stack[0]; } int main(){ cin>>c; i=0; len=strlen(c); cout<<walk(i)<<endl; return 0; }
输入输出样例(不需要加等号):
相关文章推荐
- 利用表达式树,计算一个加减乘除(可带括号)的表达式
- 11.表达式计算对一串加减乘除带括号进行计算
- C语言简单计算器(基于栈和逆波兰表达式)这几天忙着开学的事宜,一直没时间刷提,就把今天刚做好的课程设计——简易计算器贴在这给大家参考!(计算小数时要用0减正数并用括号括起来,这一点不足以后再改进)
- 简单的JAVA计算表达式,支持加减乘除括号
- 计算带括号的四则运算表达式
- USTC机试—根据四则不含括号的四则表达式计算其值输出到一个文件中
- 模拟计算器:一个带加减乘除和括号的表达式 求值
- 栈-----括号匹配+表达式计算
- 计算带括号的四则运算表达式,这个实现方式你想过吗?
- 解决JS浮点数(小数)计算加减乘除的BUG
- 解决JS浮点数(小数)计算加减乘除的BUG
- 输入数学表达式并计算出结果(包括小数)
- shell脚本表达式计算命令bc和限定计算结果小数位数
- java中正则表达式用Pattern计算字符串的结果(四则运算);分成有括号和没括号;当然也可以采用逆波兰式
- java自制计算器(加减乘除 清空 退位 支持小数 括号)
- NYOJ 35 表达式求值 (中缀表达式 小数 带括号)
- 中缀表达式的计算(含出错处理,括号处理)
- 使用堆栈将缺少左括号的表达式补全并计算其值
- 使用传统算法进行表达式求值(数字支持科学表示法,操作符支持加减乘除乘方, 支持括号, 不支持函数)
- 栈-----括号匹配+表达式计算