思路:定义一个变量让那个它指向数字末尾,如果是加的话,就可以将它的值直接入栈,减号的话就乘负一再入栈。遇到* /号,那仅仅需要更新栈尾,比如3 * 4 ,则将12入栈,最后只需要将栈中所有元素相加即可。
#include<stdio.h>
#include<cstring>
#include<iostream>
#include <iomanip>
using namespace std;
static int M = 2000;
int main()
{
double arr[M];
int mo;
double num;
char op1,op2;
double sum = 0;
while(cin >> num)
{
mo = 0;
arr[++mo] = num;//mo一直指向的是末尾数字
while(scanf(" %c %lf",&op1,&num))//以1 + 2 * 3的格式输入
{
scanf("%c",&op2);
if(op1 == '+')
arr[++mo] = num;
if(op1 == '-')
arr[++mo] = num * (-1);
if(op1 == '*')//只更新栈尾
arr[mo] = arr[mo] * num;
if(op1 == '/')//只更新栈尾
arr[mo] = arr[mo] / num;
if(op2 != ' ')
break;
}
sum = 0;//总和
for(int i = 1;i <= mo;i++)
sum += arr[i];
cout << "结果是:" << fixed << setprecision(3) << sum << endl;
}
return 0;
}