描述: | Question: 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;
Interface: int smallestDigit(int a[],int nCount,char * strRst) Function: Arrange digits in the input array to form a smallest digit. int nCount: length of the array char * strRst: returned value |
#include "oj.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <iostream>
#include <sstream>
using namespace std;
// 功能:将输入的数组排成最小的数
// 输入: int a[]:整型数组
// int nCount:数组长度
// char * strRst 返回值
// 输出:
// 返回:成功返回0 异常返回-1
int myCompare(const void *str1 , const void *str2)
{
char *s1 = new char[20]();
char *s2 = new char[20]();
strcpy(s1 , *(const char **)str1);
strcat(s1 , *(const char **)str2);
strcpy(s2 , *(const char **)str2);
strcat(s2 , *(const char **)str1);
int result = strcmp(s1 , s2);
delete [] s1;
delete [] s2;
return result;
}
int smallestDigit(int a[],int nCount,char * strRst)
{
if(!a || nCount<=0)
return -1;
int i;
char **strNumbers = (char **)(new int[nCount]());
for(i=0; i<nCount; i++)
{
strNumbers[i] = new char[10]();
sprintf(strNumbers[i] , "%d" , a[i]);
}
qsort(strNumbers, nCount , sizeof(char *) , myCompare);
for(i=0; i<nCount; i++)
{
strcat(strRst , strNumbers[i]);
}
for(int i = 0 ; i < nCount ; i++)
delete [] strNumbers[i];
delete [] strNumbers;
return 0;
}