我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int level(char c){
if(c=='+'||c=='-') return 1;
if(c=='*'||c=='/') return 2;
if(c=='^') return 3;
if(c=='(') return 4;
return 0;
}
int compare(char a,char b){
if(level(a)>level(b)) return 1;
else return 0;
}
int op(int a, char op, int b)
{
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
case '^': return pow(a,b);
}
}
int is(char c){
if(c>='0'&&c<='9') return 1;
else return 0;
}
int main(){
char suan[1000];
char ch[1000]={'0'};
int num[1000]={0};
int i=0,j=0,k=0;
gets(suan);
while(suan[i]!='\0'){
if(is(suan[i])){
while(is(suan[i])){
num[j]=num[j]*10+suan[i++]-'0';
}
j++;
continue;
}
else{
if(suan[i]=='(') ch[k++]=suan[i];
else if(suan[i]==')'){
while(ch[k-1]!='('){
num[j-2]=op(num[j-2],ch[k-1],num[j-1]);
num[j-1]=0;
j--;k--;
}
k--;
}
else {
if(k==0||compare(suan[i],ch[k-1])) ch[k++]=suan[i];
else{
while(!compare(suan[i],ch[k-1])){
if(ch[k-1]=='(') {break;}
num[j-2]=op(num[j-2],ch[k-1],num[j-1]);
num[j-1]=0;
j--;k--;
if(j==0) break;
}
ch[k++]=suan[i];
}
}
}
i++;
}
while(j!=1&&k>0){
num[j-2]=op(num[j-2],ch[k-1],num[j-1]);
j--;k--;
}
printf("%d",num[0]);
return 0;
}