设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数

这篇博客探讨了如何将n个正整数按照特定方式排列,组成一个最大的多位数。作者列举了不同网友提供的解决方案,包括冒泡排序和自定义比较函数。这些代码示例分别使用C++标准库的不同组件,如`<iostream>`、`<string>`、`<vector>`等,展示了如何实现字符串比较和排序,以达到组合成最大数字的目的。
摘要由CSDN通过智能技术生成

设有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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值