输入一个每个运算数都仅为一位数且只包含+ - * /
运算符的后缀表达式,要求计算该表达式的值。
输入格式:
测试数据有多组,处理到文件尾。每组测试数据输入一个字符串(仅可能包含数字字符和+ - * /
,不超过20个字符)表示的后缀表达式。
输出格式:
对于每组测试,输出后缀表达式的计算结果,结果保留两位小数。
输入样例:
123*+68/-
931-3*+82/+
输出样例:
6.25
19.00
来源:
黄龙军, 等. 数据结构与算法(Python版),上海: 上海交通大学出版社, 2023. ISBN: 9787313280732
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct ZHAN{
float data;
struct ZHAN * next;
}zhan;
struct ZHAN * create(){
zhan * Z;
Z=(zhan *)malloc(sizeof(zhan));
Z->next=NULL;
return Z;
}
void add(zhan *Z,float x){
zhan * p;
p=(zhan *)malloc(sizeof(zhan));
p->data=x;
p->next=Z->next;
Z->next=p;
}
void get(zhan *Z,float* x){
if(Z->next==NULL){
//printf("空,错误");
}
zhan * p=Z->next;
*x=p->data;
Z->next=p->next;
free(p);
}
int main(){
char s[20];
while(scanf("%s",&s)!=EOF){
zhan *Z;
Z=create();
int i=0;
while(1){
char c=s[i];
float a,b,x;
if(c=='\0') break;
switch(c){
case '+':
get(Z,&a);get(Z,&b);
x=b+a;
add(Z,x);
break;
case '-':
get(Z,&a);get(Z,&b);
x=b-a;
add(Z,x);
break;
case '*':
get(Z,&a);get(Z,&b);
x=b*a;
add(Z,x);
break;
case '/':
get(Z,&a);get(Z,&b);
x=b/a;
add(Z,x);
break;
default:
add(Z,(int)(c-'0'));
}
i++;
}
for(int i=0;i<20;i++){
s[i]='\0';
}
float o;
get(Z,&o);
printf("%.2f\n",o);
}
return 0;
}