问题描述
这是我的 Postfix Notation 函数代码。嗯,我测试了几个案例,其中大部分都运行良好。 但是,下面的这种情况会返回错误的答案。我不知道我的代码中哪个是错误的。
=> 输入数据前 100 行 11 3 3 * 3 * 3 * 3 * 3 *
=> 解决方案数据前 100 行 729
调试了好几次,发现tmp推送到STACK后,tmp变成了“-13”(当tmp的计算结果是243时)。
M 的范围是 (3 ≤ M ≤ 11 ).
#include <stdlib.h>
int M;
int STACK[13];
int ans,Sp;
void push(char c) {
STACK[Sp++] = c;
}
int pop() {
int n = STACK[--Sp];
STACK[Sp] = NULL;
return n;
}
int main() {
int i,j,n1,n2,tmp;
char op;
scanf("%d",&M);
for (i = 0; i < M; i++) {
scanf(" %c",&op);
switch (op)
{
case '+':
n1 = pop();
n2 = pop();
tmp = n1 + n2;
break;
case '*':
n1 = pop();
n2 = pop();
tmp = n1 * n2;
break;
case '-':
n1 = pop();
n2 = pop();
tmp = n2 - n1;
break;
case '/':
n1 = pop();
n2 = pop();
tmp = n2 / n1;
break;
default:
tmp = op - '0';
break;
}
push(tmp);
}
ans = pop();
printf("%d",ans);
return 0;
}
解决方法
您的 push
函数声明为:
void push(char c)
请注意,参数 c
是一个 char
。
如果 char
是有符号的,那么它不能处理像 243
这样大的值,它的范围只能达到 127
(如果使用二进制补码)。
您应该将参数设为 int
:
void push(int c)