为什么我推入STACK后数据变了?
Why the data changed after I push the data in STACK?
这是我的 Postfix Notation 函数代码。好吧,我测试了几个案例,大多数都运行良好。
但是,下面这个案例 returns 错误的答案。我不知道我的代码哪一个是错的。
=> 输入数据前 100 行
11
3 3 * 3 * 3 * 3 * 3 *
=> 解决方案数据前 100 行
729
=> 用户输出前 100 行
-39
我调试了几次,发现tmp推到STACK后变成了“-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)
这是我的 Postfix Notation 函数代码。好吧,我测试了几个案例,大多数都运行良好。 但是,下面这个案例 returns 错误的答案。我不知道我的代码哪一个是错的。
=> 输入数据前 100 行 11 3 3 * 3 * 3 * 3 * 3 *
=> 解决方案数据前 100 行 729
=> 用户输出前 100 行 -39
我调试了几次,发现tmp推到STACK后变成了“-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)