龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

求最大数

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
一 问题描述 设有n个正整数(n 可以将问题这样变化一下: 比如我输入的是 123 2 33 1006 12这样几个数字 我先找出最大的数字的位数为四位,再将所有的数字变成四位数:

一 问题描述

  设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数。程序输入:n,程序输出:n个数连接成的多位数。二 问题分析

  可以将问题这样变化一下:

  比如我输入的是  123 2 33 1006 12这样几个数字

  我先找出最大的数字的位数为四位,再将所有的数字变成四位数:

  1230 2000 3300 1006 1200 

   然后进行排序 

  3300 2000 1230 1200 1006

   这样将后面加上的0去掉的序列不就是最大数字吗?

  于是最大数字就是

  332123121006

  因为以下程序用的INT的类型所以只在-32728~32727间有效,假如想要更大范围须改成long类型

三 C程序

#define MAXSIZE 100

  #include

  int max(int a[],int i) /*判定出最大数字的位数*/

  {int m;

   int size();

   m=a[i];

   for(;i>=0;i--)

   if(a[i]>m)

   m=a[i];

   return(size(m));

  }

int size(int interger) /*判定出这个要组合数字的位数*/

  {

   if(interger>10000)

   return 5;

   else if(interger>1000)

   return 4;

   else if(interger>100)

   return 3;

   else if(interger>10)

   return 2;

   else

   return 1;

  }

int change(int i ,int maxsize) /*将本数字变成和最大数相同位数的数字*/

  {

   int size();

   switch(maxsize-size(i))

   {case 0:break;

   case 1:i=i*10;break;

   case 2:i=i*100;break;

   case 3:i=i*1000;break;

   case 4:i=i*10000;break;

   default:printf("error

");

   }

   return i;

  }

main()

  {

   int a[MAXSIZE],b[MAXSIZE],i,j,count,temp,s;

   printf("Please input some intergers and input -1 to finish

");

   for(i=0;i

   {

   scanf("%d",&a[i]);

   if(a[i]<0)

   break;

   }

  count=i-1;

  s=max(a,count);

  for(i=count;i>=0;i--)

   b[i]=change(a[i],s);

  for(j=0;j<=count-1;j++) /*用冒泡法对变化数排序,其实本质是在对原组合数字进行排序*/

   for(i=0;i<=count-1;i++)

   {

   if(b[i]

   {

   temp=a[i];

   a[i]=a[i+1];

   a[i+1]=temp;

   temp=b[i];

   b[i]=b[i+1];

   b[i+1]=temp;

   }

   }

  printf("max interger =");

  for(i=0;i<=count;i++)

   printf("%d",a[i]);

  }

  

  

四 实验结果

输入:56 2 1 输出:5621

输入:21 35 2 输出:35221

  

  

精彩图集

赞助商链接