• 当前位置:首页>>C语言>>C语言编程实例>>求最大数
  • 求最大数
  • 一 问题描述
    设有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

     

    [1]