|
100鱼币
【问题描述】
设计一个简单的计算器,一次性将所有的运算命令输入,先计算的后输入。首行输入一个数字,表示运算命令的总个数;其余各行输入,每行表示一个运算命令(包括运算操作符和操作数)。所有的输入及输出都为整数。运算操作符有只有Add、Sub、Mul,即加法、减法、乘法三种。
【输入形式】
首行:运算命令的总个数
其余各行:每次运算命令,包括运算操作符和操作数
【输出形式】
输出计算结果
【样例输入】
4
Add 1
Sub 2
Mul 4
Sub 4 5
【样例输出】
3
【样例说明】
计算表达式为(5-4)*4-2+1
有哪位大神能写一份好使的详细详细详细算法(算法就行,程序更好)
为啥我的程序老是有两个结果是错误的(这是作业),怎么调试也调不出来哪里错了,然后学校还不告诉我出错的事例
下面是我的程序:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data[1000], size;
char x[1000];
}node, *qnode;
int check(char *q)
{
if(q[0] == 'A'&&q[1] == 'd'&&q[2] == 'd')
{
return 1;
}
if(q[0] == 'S'&&q[1] == 'u'&&q[2] == 'b')
{
return 2;
}
if(q[0] == 'M'&&q[1] == 'u'&&q[2] == 'l')
{
return 3;
}
}
int main()
{
int i, j, number, end=0, level, x1, x2, mid;
char go[3]={0}, c1, c2, y;
node list1, list2;
list1.size = 0;
scanf("%d", &number);
scanf("%c", &c1);
for(i=0; i<number; i++)
{
for(j=0; j<3; j++)
{
scanf("%c", &go[j]);
}
scanf("%c", &c1);
level = check(go);
if(level == 1)
{
scanf("%d%c", &x1, &y);
if(y== ' ')
{
scanf("%d%c", &x2, &y);
mid = x1+x2;
end+=mid;
}
else
{
list1.data[i] = x1;
list1.x[i] = '+';
list1.size++;
}
}
if(level == 2)
{
scanf("%d%c", &x1, &y);
if(y== ' ')
{
scanf("%d%c", &x2, &y);
mid = x2-x1;
end+=mid;
}
else
{
list1.data[i] = x1;
list1.x[i] = '-';
list1.size++;
}
}
if(level == 3)
{
scanf("%d%c", &x1, &y);
if(y== ' ')
{
scanf("%d%c", &x2, &y);
mid = x1*x2;
end+=mid;
}
else
{
list1.data[i] = x1;
list1.x[i] = '*';
list1.size++;
}
}
}
list2.size = list1.size;
for(i=0; i<list1.size; i++)
{
list2.data[i] = list1.data[list1.size-1-i];
list2.x[i] = list1.x[list1.size-1-i];
}
for(i=0; i<list2.size; i++)
{
while(list2.x[i+1] == '*'&&i!=list2.size-1)
{
mid = list2.data[i+1]*list2.data[i];
list2.data[i] = mid;
for(j=i+1; j<list2.size-1; j++)
{
list2.data[j] = list2.data[j+1];
list2.x[j] = list2.x[j+1];
}
list2.size--;
}
if(list2.x[i] == '+')
{
end += list2.data[i];
}
if(list2.x[i] == '-')
{
end -= list2.data[i];
}
if(list2.x[i] == '*')
{
end *= list2.data[i];
}
}
printf("%d", end);
return 0;
}
|
|