C语言实现逆波兰表达式(栈的应用)
#include<iostream>
#include<cstdio>
using namespace std;
const int MAXSIZE = 110;
char a[MAXSIZE];
double operNum[MAXSIZE];
double getSum(int* i){//地址传递,可以在边求值时边改变i的原值。如若是值传递,会导致值的重复算
double sum = 0.0;
int k = 0;
while(a[*i] >= '0' && a[*i] <= '9'){
sum = sum * 10 + a[*i] - '0';
(*i)++;
}
if(a[*i] == '.'){
(*i)++;
while(a[*i] >= '0' && a[*i] <= '9'){
sum = sum * 10 + a[*i] - '0';
(*i)++;
k++;
}
}
while(k!=0){
sum /= 10;
k--;
}
return sum;
}
int main(){
gets(a);//这样可以读入空格,要求以'#'结尾
int i=0;
int top=0;
double x1,x2;
while (a[i] != '#'){
if(a[i] >= '0' && a[i] <= '9'){
double f = getSum(&i);
operNum[top++] = f;
}else if(a[i] == ' '){
i++;
}else if(a[i] == '+'){
x1 = operNum[--top];
x2 = operNum[--top];
operNum[top++] = x1 + x2;
i++;
}else