c++ - 为什么在自己电脑上没问题,可OJ老是提示栈错误?
本文介绍了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屋!
查看全文