本文地址: http://blog.csdn.net/caroline_wendy
题目: 输入一个正整数数组, 把数组里所有数字拼接起来排成一个数, 打印能拼接出的所有数字中最小的一个.
大数转换为字符串, 重载快速排序的比较方法, 进行排序, 最后拼接.
代码:
/* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <stdlib.h> #include <string.h> int compare(const void* strNumber1, const void* strNumber2) { const int MaxNumberLength = 10; char* strCombine1 = new char[MaxNumberLength*2 + 1]; char* strCombine2 = new char[MaxNumberLength*2 + 1]; strcpy(strCombine1, *(const char**)strNumber1); strcat(strCombine1, *(const char**)strNumber2); strcpy(strCombine2, *(const char**)strNumber2); strcat(strCombine2, *(const char**)strNumber1); int result = strcmp(strCombine1, strCombine2); delete[] strCombine1; delete[] strCombine2; return result; } void PrintMinNumber (int* numbers, int length) { const int MaxNumberLength = 10; if (numbers == NULL || length <= 0) return; char** strNumbers = (char**)(new int[length]); for (int i=0; i<length; ++i) { strNumbers[i] = new char[MaxNumberLength + 1]; sprintf(strNumbers[i], "%d", numbers[i]); } qsort(strNumbers, length, sizeof(char*), compare); for (int i=0; i<length; ++i) printf("%s", strNumbers[i]); printf("\n"); for (int i=0; i<length; ++i) delete[] strNumbers[i]; delete[] strNumbers; } int main(void) { int input[] = {3, 32, 321}; PrintMinNumber(input, 3); return 0; }
输出:
321323
编程算法 - 把数组排成最小的数 代码(C),布布扣,bubuko.com
原文地址:http://blog.csdn.net/caroline_wendy/article/details/36175619