#include<iostream>
using namespace std;
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<stack>
stack<float> q;
char str[10000];
char num[10];
int n;
int main(){
char temp;
float ch1, ch2;
int i, j;
float a;
while(gets(str)){
int k = 0;
memset(num, 0, sizeof(num));
for(i = strlen(str) -1; i > 0; i--){
// printf("i:%d\n",i);
if(str[i] >= '0' && str[i] <='9'|| str[i] == '.'){
num[k] = str[i];
// printf("num[%d]:%c\n",k, num[k]);
k++;
}
if(str[i] == '*' || str[i] == '/' || str[i] == '+' || str[i] == '-')
continue;
if(str[i-1] < '0'){
switch(str[i -1]){
case '*':
ch1 = q.top();
q.pop();
ch2 = q.top();
q.pop();
q.push(ch1 * ch2);
// printf("top:%f\n", q.top());
break;
case '+':
ch1 = q.top();
q.pop();
ch2 = q.top();
q.pop();
q.push(ch1 + ch2);
// printf("top:%f\n", q.top());
break;
case '/':
ch1 = q.top();
q.pop();
ch2 = q.top();
q.pop();
if( ch2 != 0)
q.push(ch1 / ch2);
// printf("top:%f\n", q.top());
break;
case '-':
ch1 = q.top();
q.pop();
ch2 = q.top();
q.pop();
q.push(ch1 - ch2);
// printf("top:%f\n", q.top());
break;
case ' ':
for(j = 0; j < k / 2; j++){//逆置字符串
temp = num[j];
num[j] = num[k-1-j];
num[k-1-j] = temp;
}
// puts(num);
a = atof(num);
q.push(a);
memset(num, 0,sizeof(num));
// printf("top:%f\n", q.top());
k = 0;
break;
}//swtich
}//if
}//for
printf("%.2f\n", q.top());
}//while
return 0;
}
我的前缀式计算
最新推荐文章于 2018-05-16 14:22:00 发布