您的位置:首页 > 其它

计算表达式(加减乘除括号小数立方)

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;
}

输入输出样例(不需要加等号):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐