| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13455 人关注过本帖
标题:求助分析:从键盘输入一个正整数,将该正整数中的每位数字重新排列,输出最 ...
取消只看楼主 加入收藏
kinglon
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-9-25
收藏
 问题点数:0 回复次数:4 
求助分析:从键盘输入一个正整数,将该正整数中的每位数字重新排列,输出最大数和一个最小数
我们用scanf或是getchar获取一个正整数之后,如何把它个、十、百、千……等等位的数再分离出来?

比如我输入了一个56018,  我们如何把 5   6  0  1  8  分离出来?如果可以想办法把他们分离出来,这题就好解了。

有人说用数组分别把个位十们百位等等的数存在数组里面,可是如果才能把数存在数组里在呢?我觉得把数组里面这个思路不太合适,应该换个方法,不知道高手有何见解。

谢谢指点。
搜索更多相关主题的帖子: 小数 整数 大数 数字 键盘 
2007-12-06 08:40
kinglon
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-9-25
收藏
得分:0 
#include <stdio.h>

main ()
{
     short num, t, tem, i, x[4];  //目前定义x[4],意思是只实验输四位数,如果输入的数字超过四位,我这个程序就解决不了。
     printf("Input a number:\n");
     scanf("%d", &num);

     x[0]=num/1000;    //我用除的方法,不知道这个循环怎么写,所以就只能这样写了,想看看高手们是怎么做的。
     x[1]=num/100-x[0]*10;
     x[2]=num/10-x[0]*100-x[1]*10;
     x[3]=num-x[0]*1000-x[1]*100-x[2]*10;
     printf("\n");

     for (i=0; i<4; i++)
     {     
          printf("%d  ", x[i]);
     }
     printf("\n");

     for (t=1; t<4; t++)
     {
          for (i=0; i<=3-t; i++)
          {
               if ( x[i] > x[i+1] )
               {
                    tem=x[i]; x[i]=x[i+1]; x[i+1]=tem;
               }
          }
     }

     for (i=0; i<4; i++)
     {     
          printf("%d", x[i]);
     }
     printf("\n");

     for (i=3; i>=0; i--)
     {     
          printf("%d", x[i]);
     }
     printf("\n");
}


以上是我昨天晚上想的,我也是用除的,用除之后也存在一些问题我解决不了,比如:如何才能知道用户输入了几位数?还有就是用除它的循环怎么写?

[[italic] 本帖最后由 kinglon 于 2007-12-6 09:18 编辑 [/italic]]
2007-12-06 09:16
kinglon
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-9-25
收藏
得分:0 
有新方法了,不过里面还有一个小问题。。。  

num=getchar();
  for ( i=0; i<x; i++ )   //x为输入数字的长度,不知道有没有一个函数可获取到数字的长度,或是其他方法得到数字长度,我查函数里面只有获取字符串的长度,没找到可以获取数字的长度,请高手在这个地方再指点,谢谢。
  {
     a[i]=num%10;
     num=num/10
     
     
     
  }

多谢指点,现在用这个方法很好,比我昨天想的要好,就差那个X问题,如何获取那个数字的长度了。

用这个方法我们就可以把每位的数单独挑出来了。

56018%10=8    //第1次循环,得到个位
56018/10=5601

5601%10=1     //第2次循环,得到十位
5601/10=560

560%10=0      //第3次循环,得到百位
560/10=56

56%10=6       //第4次循环,得到千位
56/10=5

5%10=5        //第5次循环,得到万位
5/10=0        //循环结束
2007-12-06 09:44
kinglon
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-9-25
收藏
得分:0 
实验了N天,今天终于有了灵感,搞定了。大家看看我的程序,给点意见,谢谢大家.

#include <stdio.h>
#include <string.h>

main ()
{
    char num[11] ,temp ; //定义一个数组存储输入的数字,这样方便取得数字长度
    short i, j, a, a2 ;
    scanf("%s",num);
    a=strlen(num);   //用一个函数求得数字(字符串)长度,方便下面循环使用
    a2=a-1;          //用于排序

    for (i=1; i<a; i++)  //我只会用冒泡法排序,在这里用这个方法排序(不过据说冒泡法是最笨的)
    {
        for (j=0; j<=a2-i; j++)
        {
            if (num[j] > num[j+1])
            {
                temp=num[j]; num[j]=num[j+1]; num[j+1]=temp;
            }
        }
    }

    for (i=0; i<a; i++)           //输出最小数
    {
        printf("%c",num[i]);
    }
    printf("\n");

    for (i=a2; i>=0; i--)         //输出最大数
    {
        printf("%c",num[i]);
    }
    printf("\n");

}
2007-12-08 12:08
kinglon
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-9-25
收藏
得分:0 
下午别人指点说,求最大数不用排序,所以又有一招,程序如下,请再指点,谢谢。

#include <stdio.h>
#include <string.h>

main ()
{
    char num[11] ; //定义一个数组存储输入的数字,这样方便取得数字长度
    short a, i, max, min;
    scanf("%s",num);
    a=strlen(num);   //用一个函数求得数字长度,方便下面循环使用

    for (i=0; i<a; i++)  //打印最大数
    {
        max=(num[i]>num[i+1]) ? num[i] : num[i+1];

        printf("%d",max);
    }
    printf("\n");

    for (i=0; i<a; i++)   //打印最小数
    {
        min=(num[i]<num[i+1]) ? num[i] : num[i+1];

        printf("%d",min);
    }
    printf("\n");
}
2007-12-08 14:56
快速回复:求助分析:从键盘输入一个正整数,将该正整数中的每位数字重新排列,输 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016363 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved