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

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

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

谢谢指点。
搜索更多相关主题的帖子: 小数 整数 大数 数字 键盘 
2007-12-06 08:40
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 
可以用除的,你先估计你要输入的最大的情况
比如是万,你就除个10000,就把万位分离出来了
如56018先除10000,得5,然后把56018-5*10000得6018
把6018除1000,得6........
这样就可以了

女朋友问我想怎么死~~~
             我说我想"爽死"
2007-12-06 08:52
MikeFT
Rank: 1
来 自:青岛
等 级:新手上路
帖 子:644
专家分:0
注 册:2006-11-1
收藏
得分:0 
同意楼上观点!!!你也可以用循环做,每次循环取一个数,顺便计算一下有几位,为数组排序做准备!!!

Live And Learn !!!
2007-12-06 08:58
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
MikeFT
Rank: 1
来 自:青岛
等 级:新手上路
帖 子:644
专家分:0
注 册:2006-11-1
收藏
得分:0 
while(x%10)
x=x/10
好像是这样我也很长时间没编了!!!

Live And Learn !!!
2007-12-06 09:20
C语言的深度
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:卡特的怀抱
等 级:版主
威 望:1
帖 子:9577
专家分:19
注 册:2007-10-22
收藏
得分:0 
循环和数组合起来写的程序太多了

直接用IF

用代码打出楼房...用编程编出幸福...
2007-12-06 09:36
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
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 
LS你用IF写给我们看看
我看看你的代码
程序是时间和空间的组合
不是说看上去多的程序就是效率低的程序

女朋友问我想怎么死~~~
             我说我想"爽死"
2007-12-06 09:44
dadakai
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-12-6
收藏
得分:0 
用sizeof函数可以不?
把你的数存入一个变量然后sizeof(x);
得到的数字再减一?

我是菜鸟
2007-12-06 10:17
MikeFT
Rank: 1
来 自:青岛
等 级:新手上路
帖 子:644
专家分:0
注 册:2006-11-1
收藏
得分:0 
56018%10=8    //第1次循环,得到个位
56018/10=5601
i=1

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

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

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

5%10=5        //第5次循环,得到万位
5/10=0        //循环结束
i=5

Live And Learn !!!
2007-12-06 10:31
快速回复:求助分析:从键盘输入一个正整数,将该正整数中的每位数字重新排列,输 ...
数据加载中...
 
   



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

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