| 12345678910111213141516171819202122232425262728 |
- #include <stdlib.h>
- long cmp(int *x, int *y) {
- unsigned long sx = 10, sy = 10;
- while (sx <= *x) {
- sx *= 10;
- }
- while (sy <= *y) {
- sy *= 10;
- }
- return sx * (*y) + (*x) - sy * (*x) - (*y);
- }
- char *largestNumber(int *nums, int numsSize) {
- qsort(nums, numsSize, sizeof(int), cmp);
- if (nums[0] == 0) {
- char *ret = malloc(sizeof(char) * 2);
- ret[0] = '0', ret[1] = '\0';
- return "0";
- }
- char *ret = malloc(sizeof(char) * 1000);
- char *p = ret;
- for (int i = 0; i < numsSize; i++) {
- sprintf(p, "%d", nums[i]);
- p += strlen(p);
- }
- return ret;
- }
|