int cmp(const void*a,const void*b){
char s1[100],s2[100];
sprintf(s1,"%d%d",*(int *)a,*(int *)b);
sprintf(s2,"%d%d",*(int *)b,*(int *)a);
return strcmp(s2,s1);
}
char * largestNumber(int* nums, int numsSize){
qsort(nums,numsSize,sizeof(int),cmp);
if(nums[0]==0)
return "0";
char* res=(char*)calloc(sizeof(char),1000);
int i,len=0;
for(i=0;i<numsSize;i++){
len+= sprintf(res+len,"%d",nums[i]);
}
return res;
}
int cmp(const void* a,const void* b){
char* s1=(*(char**)a);
char* s2=(*(char**)b);
int i;
for (i=0; s1[i] && s2[i]; i++ )
{
if(s1[i] != s2[i])
return s1[i]<s2[i];
}
if(s1[i] == '\0' && s2[i] == '\0')
return 0;
else if(s2[i] == '\0'){
char* buffer=(char*)calloc(20,sizeof(char));
strcat(buffer,s1+i);
strcat(buffer,s2);
return strcmp(s1,buffer);
}
else if(s1[i] == '\0'){
char* buffer=(char*)calloc(20,sizeof(char));
strcat(buffer,s2+i);
strcat(buffer,s1);
return strcmp(buffer,s2);
}
return 0;
}
char * largestNumber(int* nums, int numsSize){
char** arr=(char**)calloc(numsSize,sizeof(char*));
char* retStr=(char*)calloc(500,sizeof(char));
int i;
for (i=0; i<numsSize; i++)
{
char* temp=(char*)calloc(20,sizeof(char));
sprintf(temp,"%d",nums[i]);
arr[i]=temp;
}
qsort(arr,numsSize,sizeof(char*),cmp);
for (i=0; i<numsSize; i++)
strcat(retStr,arr[i]);
return (*retStr=='0')?"0" :retStr;
}