//输入中缀表达式 不带括号 一位数字 直接计算结果
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
typedef struct{
int * data;
int index;
int max;
}Stackitem,*Stack;
Stack initStack()
{
Stack S=(Stack)malloc(sizeof(Stackitem));
S->max=40;
S->data = (int *)malloc(sizeof(int)*S->max);
S->index=0;
return S;
}
void put(Stack S,int e){
S->data[S->index++]=e;
}
int pop(Stack S){
return S->index?S->data[--S->index]:0;}
int get(Stack S){
return S->index?S->data[S->index-1]:0;}
int main(){
char chars[10];
scanf("%s",chars);
int index=0,it;
Stack num = initStack();
Stack sign=initStack();
char c,s;
while(c=chars[index++],c){
if(c<='9'&&c>='0'){put(num,c-'0');continue;}
if(c=='+'||c=='-'){
while(s=pop(sign),s)
if(s=='+')put(num,pop(num)+pop(num));
else if(s=='-')put(num,pop(num)*-1+pop(num));
else if(s=='/'){it=pop(num);put(num,pop(num)/it);}
else put(num,pop(num)*pop(num));
}
else{
while(s=get(sign),s){
if(s=='+'||s=='-')break;
pop(sign);
if(s=='/'){it=pop(num);put(num,pop(num)/it);}
else put(num,pop(num)*pop(num));
}
}
put(sign,c);
}
while(s=pop(sign),s)
if(s=='+')put(num,pop(num)+pop(num));
else if(s=='-')put(num,pop(num)*-1+pop(num));
else if(s=='/'){it=pop(num);put(num,pop(num)/it);}
else put(num,pop(num)*pop(num));
printf("%d",pop(num));
}
不带括号的一位数字四则运算
最新推荐文章于 2024-08-26 20:24:23 发布