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

查看:109
本文介绍了c++ - 为什么在自己电脑上没问题,可OJ老是提示栈错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我在自己的电脑上运行没有问题,可网站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;
}

解决方案

嗯,这是一个冷门的知识点

https://stackoverflow.com/que...

这篇关于c++ - 为什么在自己电脑上没问题,可OJ老是提示栈错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆