我在自己的电脑上运行没有问题,可网站(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;}
解决方案
嗯,这是一个冷门的知识点