设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为7424613
程序输入:n
程序输出:n个数联接成的多位数。
此问题本是老师留的一道作业。我发到csdn上后,没想到讨论还挺激烈。下面摘录一些网友们的代码。http://community.csdn.net/Expert/topic/3372/3372952.xml?temp=.9760858
lujianping(lujianping) 的代码:
#include <stdafx.h>
#include <string.h>
#define min(x,y) ((x)>(y)?(y):(x))
int NewStrcmp(char *pszNum1,char *pszNum2)
{
if ( strlen(pszNum1) == 0 )
return -1;
if ( strlen(pszNum2) == 0 )
return 1;
unsigned int nMinLen = min(strlen(pszNum1),strlen(pszNum2));
int nResult;
//如果一个串是以另外一个串为前缀的话
if ( (nResult = strncmp(pszNum1,pszNum2,nMinLen)) == 0 )
{
if ( nMinLen == strlen(pszNum1) )
{
return NewStrcmp( pszNum1 , pszNum2 + nMinLen );
}
else
{
return NewStrcmp( pszNum1 + nMinLen , pszNum2);
}
}
else
{
//如果不等,则直接返回比较结果
return nResult;
}
return 0;
}
int main(int argc, char* argv[])
{
// result: 7 4 42 3 1 s
//char* pszNum[] = { "7", "42", "3", "4", "1" };
// result: 4 432 42 3 1
//char* pszNum[] = { "432", "4", "42", "3", "1" };
// result: 71 711 7112 4 432 42 3 1
char *pszNum[] = { "7771", "7", "77", "7118" , "711" } ;
//使用冒泡排序
for ( unsigned int i = 0 ; i <
sizeof(pszNum)/(sizeof(char *)) ; i ++ )
{
for ( unsigned int j = 0 ; j <
sizeof(pszNum)/(sizeof(char *)) - i - 1; j ++ )
{
if ( NewStrcmp(pszNum[j],pszNum[j+1]) < 0 )
{
char *pTmp;
pTmp = pszNum[j];
pszNum[j] = pszNum [ j + 1] ;
pszNum