📄 1059.cpp
字号:
#include<stdio.h>
#include<iostream>
#include<string>
#include<malloc.h>
using namespace std;
int a[200];
char b[200];
int topa;
int topb;
int tops;
int symbol_rank(char p1)
{
if(p1=='(')
return 4;
else if(p1=='+'||p1=='-')
return 2;
else if(p1=='*'||p1=='/')
return 3;
else if(p1==')')
return 1;
else if(p1=='#')
return 0;
else {
// printf("符号不合法!!!\n");
return -1;
}
}
int Precede(char p1,char p2)
{
if((p1=='('&&p2==')')||(p1=='#')&&(p2=='#'))
return 0;
if((p1==')'&&p2=='(')||(p1=='#'&&p2==')')||(p1=='('&&p2=='#')){
printf("表达式输入错误!!!");
return -2;
}
if(p1=='(')
return -1;
if(p1==')')
return 4;
int a=symbol_rank(p1),b=symbol_rank(p2);
if(a>=b)
return 1;
else
return -1;
}
int Operate(int p1,char theta,int p2)//flag用来检查除数是否为0
{
switch(theta){
case '+':return p1+p2;break;
case '-':return p1-p2;break;
case '*':return p1*p2;break;
case '/':if(p2!=0) return p1/p2;
// else {printf("你输入了表达式中可能出现了除数为0的项,请认真检查!!!\n\n");
// flag=1; return 1;}
// break;
// default: printf("********符号输入错误*********");
}
}
int main()
{
string s;
// freopen("1059.txt","r",stdin);
cin >> s;
s[s.size()]='#';
topa=0;
topb=0;
tops=0;
b[topb++]='#';
char c=s[tops++];
while(c!='#'||b[topb-1]!='#'){
if('0'<=c&&c<='9'){
a[topa++]=c-'0';
c=s[tops++];
}
else{
if(Precede(b[topb-1],c)==-1){
b[topb++]=c;
c=s[tops++];
}
else if(Precede(b[topb-1],c)==0){
topb--;
c=s[tops++];
}
else{
int e=a[--topa];
int d=a[--topa];
char o=b[--topb];
a[topa++]=Operate(d,o,e);
}
}
}
cout << a[0] << endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -