题目描述
对于一个不存在括号的表达式进行计算
输入描述:
存在多种数据,每组数据一行,表达式不存在空格
输出描述:
输出结果
输入
6/2+3+3*4
输出
18
我的错误代码
#include<iostream>
using namespace std;
int main()
{
int num[1000];
int top1 = -1;
char oper[1000];
//int temp1[1000];
//char temp2[1000];
int top2 = -1;
//int top3=-1;
//int top4=-1;
char a;
while (cin >> a)
{
if (a >= '48'&&a <= '57') //a是数字
num[++top1] = int(a);
else//a是运算符
oper[++top2] = a;
}
int b = 0;
int c = 0;
char d;
char e;
while (top1 != 0 && top2 != 0)
{
b = num[top1--];
c = num[top1--];
d = oper[top2--];
e = oper[top2--];
if (d == '*' || d == '/')//运算符是乘或除
{
switch (d)
{
case'*':num[++top1] = c * b; break;
case'/':num[++top1] = c / b; break;
}
}
else {//运算符是加或减
if (e == '*' || e == '/')
{
int x = num[top1--];
switch (e)
{
case'*':num[++top1] = x * c; break;
case'/':num[++top1] = x / c; break;
}
num[++top1] = b;
oper[++top2] = d;
}
else {
switch (d)
{
case'+':num[++top1] = c + b; break;
case'-':num[++top1] = c - b; break;
}
oper[++top2] = e;
}
}
}
b = num[top1--];
c = num[top1--];
d = oper[top2--];
int result = 0;
switch (d)
{
case'+':
result = c + b;
break;
case'-':
result = c - b;
break;
case'*':
result = c * b;
break;
case'/':
result = c / b;
break;
}
cout << result;
return 0;
}
报错
暂时没有发现错误在哪。。。
大佬的正确代码
#include<stdio.h>
int main()
{
char ch;
double a[1000],t;
while(scanf("%lf",&t)!=EOF)
{
a[0]=0;
a[1]=t;
int i=1;
while(scanf("%c",&ch)!=EOF&&ch!='\n')
{
scanf("%lf",&t);
if(ch=='+') {a[++i]=t;}
else if(ch=='-') {a[++i]=-t;}
else if(ch=='*') {a[i]*=t;}
else if(ch=='/') {a[i]/=t;}
}
for(int j=1;j<=i;j++)
{
a[0]+=a[j];
}
printf("%.0f\n",a[0]);
} return 0;
}
真的简单,明天再debug我的错误吧。。。