一直WA,该怎么改?


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int comp(const void* p, const void* q) 
{
    const char* str1 = (const char*)p;
    const char* str2 = (const char*)q;
    return strcmp(str2, str1);
}
int main() 
{
    int n,i;
    while(scanf("%d",&n)!=EOF)
    {
    char num[n][20], str[20];
    for (i=0;i<n;++i) 
    {
        scanf("%s",str);
        strcpy(num[i], str);
    }
    qsort(num,n,sizeof(num[0]),comp);
    for (i=0;i<n;++i) printf("%s",num[i]);
    }
    return 0;
}

设有 n 个正整数,将它们连成一排,组成一个最大的多位数。例如:输入 n = 3 以及三个正整数 13, 312, 343, 则连成的最大数为 34331213

输入描述
第 1 行输入正整数个数 n, 下面 n 行输入 n 个整数,n 不大于 100, 每个正整数不超过 20 位

输出描述
一行,组成的最大整数,输入保证输出结果不超过 200 位

样例输入
4

7

13

4

246

样例输出
7424613

修改见注释处,供参考:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int comp(const void* p, const void* q) 
{
    const char* str1 = (const char*)p;
    const char* str2 = (const char*)q;
    return strcmp(str2, str1);
}
int main() 
{
    int n,i;
    char num[100][20] = {0};//char num[n][20],str[20];
    // while(scanf("%d",&n)!=EOF)
    //{
    scanf("%d",&n);
    for (i=0;i<n;++i)
    {
         scanf("%s",num[i]); //scanf("%s",str);
                             //strcpy(num[i], str);
    }
    qsort(num,n,20,comp);//qsort(num,n,sizeof(num[0]),comp);
    for (i=0;i<n;++i) printf("%s",num[i]);
    //}

    return 0;
}