微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我在STACK中推送数据后数据发生了变化?

如何解决为什么我在STACK中推送数据后数据发生了变化?

这是我的 Postfix Notation 函数代码。嗯,我测试了几个案例,其中大部分都运行良好。 但是,下面的这种情况会返回错误的答案。我不知道我的代码中哪个是错误的。

=> 输入数据前 100 行 11 3 3 * 3 * 3 * 3 * 3 *

=> 解决方案数据前 100 行 729

=> 用户输出前 100 行 -39

调试了好几次,发现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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。