?? 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 + -