Arrange an Array to Form a Smallest Digit
/** * Input an array of positive integers, arrange the integers to form new digits, * and output the smallest digit among all the new ones. * Input Example 1: * {2, 1} * Output Example 1: * 12 * * Input Example 2: * {32, 321} * Output Example 2: * 32132 * * Input Example 3: * {4589, 101,41425,9999} * Output Example 3: * 1014142545899999; */ // 功能:将输入的数组排成最小的数 // 输入: int a[]:整型数组 // int nCount:数组长度 // char * strRst 返回值 // 输出: // 返回:成功返回0 异常返回-1 #include <iostream> #include <string> #include <vector> #include <sstream> #include <algorithm> using namespace std; bool cmp(string str1, string str2) { return (str1 + str2 < str2 + str1); } int smallestDigit(int a[], int nCount, char *strRst) { if(NULL == a || nCount <= 0 || NULL == strRst) { return -1; } vector<string> numStrs; stringstream strStream; string num; /*! int转string */ for(int i = 0; i < nCount; ++i) { strStream << a[i]; strStream >> num; strStream.clear(); numStrs.push_back(num); } sort(numStrs.begin(), numStrs.end(), cmp); int len = 0; for(int i = 0; i < numStrs.size(); ++i) { len = numStrs[i].size(); strncpy(strRst, numStrs[i].c_str(), len); strRst += len; } *strRst = '\0'; return 0; } int main() { int a[] = {4589, 101, 41425, 9999}; char buf[1000]; smallestDigit(a, 4, buf); cout << buf << endl; return 0; }