求最大数

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

一 问题描述

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

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

比如我输入的是123233100612这样几个数字

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

12302000330010061200

然后进行排序

33002000123012001006

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

于是最大数字就是

332123121006

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

三 C程序

#define MAXSIZE 100

#include<stdio.h>

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\n");

}

return i;

}

main()

{

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

printf("Please input some intergers and input -1 to finish\n\n");

for(i=0;i<MAXSIZE;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]<b[i+1])

{

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航