| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 2368 人关注过本帖
标题:求助分析:从键盘输入一个正整数,将该正整数中的每位数字重新排列,输出最 ...
收藏  订阅  推荐  打印 
kinglon
Rank: 2
等级:注册会员
帖子:44
积分:596
注册:2007-9-25
求助分析:从键盘输入一个正整数,将该正整数中的每位数字重新排列,输出最大数和一个最小数

我们用scanf或是getchar获取一个正整数之后,如何把它个、十、百、千……等等位的数再分离出来?

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

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

谢谢指点。
搜索更多相关主题的帖子: 小数  整数  大数  数字  键盘  
2007-12-6 08:40
万兽无缰
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:296
积分:3226
注册:2007-8-27

可以用除的,你先估计你要输入的最大的情况
比如是万,你就除个10000,就把万位分离出来了
如56018先除10000,得5,然后把56018-5*10000得6018
把6018除1000,得6........
这样就可以了

女朋友问我想怎么死~~~
             我说我想"爽死"
2007-12-6 08:52
MikeFT
Rank: 4
来自:青岛
等级:高级会员
帖子:644
积分:6720
注册:2006-11-1

同意楼上观点!!!你也可以用循环做,每次循环取一个数,顺便计算一下有几位,为数组排序做准备!!!

Live And Learn !!!
2007-12-6 08:58
kinglon
Rank: 2
等级:注册会员
帖子:44
积分:596
注册:2007-9-25

#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-6 09:16
MikeFT
Rank: 4
来自:青岛
等级:高级会员
帖子:644
积分:6720
注册:2006-11-1

while(x%10)
x=x/10
好像是这样我也很长时间没编了!!!

Live And Learn !!!
2007-12-6 09:20
C语言的深度
Rank: 12Rank: 12Rank: 12
来自:卡特的怀抱
等级:版主
威望:1
帖子:9450
积分:94949
注册:2007-10-22

循环和数组合起来写的程序太多了

直接用IF

用代码打出楼房...用编程编出幸福...
2007-12-6 09:36
kinglon
Rank: 2
等级:注册会员
帖子:44
积分:596
注册:2007-9-25

有新方法了,不过里面还有一个小问题。。。  

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-6 09:44
万兽无缰
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:296
积分:3226
注册:2007-8-27

LS你用IF写给我们看看
我看看你的代码
程序是时间和空间的组合
不是说看上去多的程序就是效率低的程序

女朋友问我想怎么死~~~
             我说我想"爽死"
2007-12-6 09:44
dadakai
Rank: 1
等级:新手上路
帖子:24
积分:330
注册:2007-12-6

用sizeof函数可以不?
把你的数存入一个变量然后sizeof(x);
得到的数字再减一?

我是菜鸟
2007-12-6 10:17
MikeFT
Rank: 4
来自:青岛
等级:高级会员
帖子:644
积分:6720
注册:2006-11-1

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-6 10:31
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.069770 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved