题目
思路
用栈存数据,遇见符号抽两个数据计算即可
代码
#include<iostream>
using namespace std;
string* stack[120];
double data[120];
int size = 0;
int main()
{
string s;
while(cin >> s)
{
string* ss = new string;
ss->erase();
ss->append(s);
stack[size++] = ss;
if(cin.get() == '\n')
break;
}
// for(int i = 0; i < size; i++)
// cout << *stack[i] << endl;
int Dsize = 0;
while(size )
{
size--;
if(*stack[size] == "+")
{
double a = data[--Dsize];
double b = data[--Dsize];
double c = a + b;
data[Dsize++] = c;
}
else if(*stack[size] == "-")
{
double a = data[--Dsize];
double b = data[--Dsize];
double c = a - b;
data[Dsize++] = c;
}
else if(*stack[size] == "*")
{
double a = data[--Dsize];
double b = data[--Dsize];
double c = a * b;
data[Dsize++] = c;
}
else if(*stack[size] == "/")
{
double a = data[--Dsize];
double b = data[--Dsize];
double c = a / b;
data[Dsize++] = c;
}
else
{
char str[10];
for(int i = 0; i < 10; i++)
str[i] = 0;
for(int i = 0; i < stack[size]->length(); i++)
{
str[i] = stack[size]->at(i);
}
data[Dsize++] = atof(str);
}
// for(int i = 0; i < Dsize; i++)
// cout << data[i] <<" ";
// cout << endl;
}
printf("%.6f\n",data[--Dsize]);
}