为什么在自己电脑上没问题,可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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
嗯,这是一个冷门的知识点
https://stackoverflow.com/que...
说实话,oj上的题目不要拿来这里问,不是不能问,而是这种类型的问题最好不要问,既然走OJ路,就注定孤身奋战。
牛客的错误说明和hdu,poj这些的不一样,不过据我猜测,既然你牵扯到栈的问题,要不是数组开小了,要不就是运行中栈爆了(比如停不下来的递归)