网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.在Visual Studio.NET中使用Cryst.
.高质量C++/C编程指南 --&nb.
.让C/C++图形程序独立运行.
.用C++访问SQL Server 2000.
.上海黑暗之龙--麻将原代码.
.设计OutLook风格的工具栏.
.C++/CLI思辨录之再谈继承.
.在C++程序中添加逻辑流程控制.
.C++ Builder 初学问与答(六).
.学数学也要学点偷懒的技术(二).
.数据结构学习C++——二叉树.
.C/C++是程序员必须掌握的语言吗?.
.自己写的一个链表综合程序.
.C++对象布局及多态实现之成员函数.
.C++面向对象编程入门:构造函数与.
.例程详析动态链接库.
.验C++中接口与实现分离的技术.
.Virtual Network Interfaces.
.用CB控制Windows注册表.
.C语言程序设计基础讲座之指针的慨.

求最大数

发表日期:2008-3-8


一 问题描述
设有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<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

上一篇:取得本地internet机器的名字及IP地址 人气:528
下一篇:求阶乘算法(0---10000)标准C++语言控制台应用程序 人气:1295
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐