为什么在自己电脑上没问题,可OJ老是提示栈错误?

lgqfhwy
  • 62

我在自己的电脑上运行没有问题,可网站https://www.nowcoder.com/pat/...)老是说栈错误。
我已经改了无数次了,实在想不到哪里可以导致栈溢出,请指正
图片描述

// Recover the Smallest Number (30)
// https://www.nowcoder.com/pat/5/problem/4025
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Str {
    char str[10];
};


void stringPlus(char a[], char b[], char result[]) {
    int len1 = strlen(a);
    for (int i = 0, k = 0; i < len1; ++i, ++k) {
        result[k] = a[i];
    }
    int len2 = strlen(b);
    for (int j = 0, k = len1; j < len2; ++j, ++k) {
        result[k] = b[j];
    }
    result[len1 + len2] = '\0';
}

bool cmpByString(Str a, Str b) {
    char stra[20];
    stringPlus(a.str, b.str, stra);
    if (strlen(stra) != (strlen(a.str) + strlen(b.str))) {
        printf("Error add");
    }
    char strb[20];
    stringPlus(b.str, a.str, strb);
    if (strlen(stra) != (strlen(a.str) + strlen(b.str))) {
        printf("Error add");
    }
    int len1 = strlen(stra);
    int len2 = strlen(strb);
    if ((len1 != len2) || (len1 > 16) || (len1 == 0)) {
        printf("Error len!\n");
    }
    for (int i = 0; i < len1; ++i) {
        if (stra[i] < strb[i]) {
            return true;
        } else if (stra[i] > strb[i]) {
            return false;
        }
    }

    return true;
}

Str Node[10010];

int main() {
    int N;
    scanf("%d", &N);
    for (int i = 0; i < N; ++i) {
        scanf("%s", Node[i].str);
    }
    sort(Node, Node + N, cmpByString);
    bool firstZero = true;
    for (int i = 0; i < N; ++i) {
        if (firstZero) {
            for (int j = 0; Node[i].str[j] != '\0'; ++j) {
                if ((Node[i].str[j] == '0') && firstZero) {
                    continue;
                } else {
                    firstZero = false;
                    printf("%c", Node[i].str[j]);
                }
            }
        } else {
            printf("%s", Node[i].str);
            firstZero = false;
        }
    }
    if (firstZero) {
        printf("0");
    }
    printf("\n");
    return 0;
}
回复
阅读 3.2k
2 个回答
✓ 已被采纳
Ethson
  • 2k

说实话,oj上的题目不要拿来这里问,不是不能问,而是这种类型的问题最好不要问,既然走OJ路,就注定孤身奋战。

clipboard.png

牛客的错误说明和hdu,poj这些的不一样,不过据我猜测,既然你牵扯到栈的问题,要不是数组开小了,要不就是运行中栈爆了(比如停不下来的递归)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏