| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13465 人关注过本帖
标题:求助分析:从键盘输入一个正整数,将该正整数中的每位数字重新排列,输出最 ...
只看楼主 加入收藏
redriver
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-12-5
收藏
得分:0 
我自己编了一下...可以将数字的各位分离出来....并求出最大和最小值..不过这个小程序只能处理INT型数据....如果想处理LONG等..自己再看看吧...
#include <stdio.h>
#include <stdlib.h>    //使用itoa,将一整型数转化成字符串
#include <string.h>
#include <math.h>

int main()
{
    const int ARRAY_SIZE = 20;
    int value,length,max,min;
    char buffer[ARRAY_SIZE];
    int num[ARRAY_SIZE];

    printf("Please enter one number:");
    scanf("%d",&value);

    length = strlen(itoa(value,buffer,10));

    for(int i=length-1; i>=0; i--)
    {
        num[i] = value / (int)pow(10,i);
        value = value % (int)pow(10,i);
        printf("%d\t",num[i]);
    }
    printf("\n");
    max = num[0];
    min = num[0];
    for(i=length-1; i>0; i--)
    {
        if(max < num[i])
            max = num[i];
        if(min > num[i])
            min = num[i];
    }
    printf("THe min number is: %d\nThe max number is: %d\n",min,max);

    return 0;
}
2007-12-06 11:28
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
LZ```要知道你输入的一个整数```有多少位不知道````

如果从键盘输入```你又何必去想``怎么拆开它呢````
使用``getchar( )``不就等于把数拆开了吗````
然后你要做什么操作就不知道````有需要```你可以 getchar()-'48' ```

如果是用函数的功能实现``那么上面的办法肯定就不能用了``

我提供的方法是  一个循环```  n是要拆的数p指向一个数组```
void chaishu (  long  n  ,  int  *p  )
{
       while ( n )
       {
             *p++  =  n%10  ;
              n  /= 10 ;
       }
       return ;
}

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-12-06 12:53
redriver
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-12-5
收藏
得分:0 
楼上的那位,你上面的程序是否看懂了啊....?程序能处理任意长度的整形数....如果要用函数封装,你的那个办法可行么...函数需要的参数是一个整数哦...你那样可以么....
以上是本人的看法...
2007-12-06 23:48
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
汗了

while(num)
{
    data[num%10]++;
    num/=10;
}

然后要最大的则从9开始循环,要最小则从1开始循环(记得从1开始得到一个数后要回到0处循环)
比如
0 1 2 3 4 5..
2 0 3 0 1..
得到的结果是200224..

倚天照海花无数,流水高山心自知。
2007-12-06 23:59
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
不用那么复杂哟

要每一位的数字吧

int main()
{
int i=0
char a[100]={0};
gets(a);
while(a[i++]);
i-=2;
//a[0]就是最高位 a[i]就是个位
return 0;
}

How are you 怎么是你?
How old are you   怎么老是你?
2007-12-07 00:38
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
看热闹
2007-12-07 02:14
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
叶柄
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-17
收藏
得分:0 
应该要排序哦    你那只能输出每2个数间的最大或最小数值啊

[[italic] 本帖最后由 叶柄 于 2007-12-8 20:35 编辑 [/italic]]
2007-12-08 20:34
叶柄
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-17
收藏
得分:0 
任意位数 (前提是你的内存够用...)
#include <stdio.h>
#include<stdlib.h>
typedef struct nod
{
        char ch;
        struct nod *next;
}linklist;
void main (void)
{   
        int count=0,i=0,j=0;//位数
        char ch,*newch,temp;
        linklist *head,*p,*rear;
    head=NULL;
        rear=head;
        p=head;
        scanf("%c",&ch);
        while(ch>47&&ch<58)//输入
        {
                count++;//计数
                if(NULL==head)
                {
                        p=(linklist*)malloc(sizeof(linklist));
                        p->ch=ch;
                        head=p;
                        head->next=NULL;
                        rear=head;
                }
                else
                {
                        p=malloc(sizeof(linklist));
                        p->ch=ch;
                        rear->next=p;
                        rear=p;
                        rear->next=NULL;
                }
                scanf("%c",&ch);
        }
        rear=head;
        newch=calloc(count+1,sizeof(char));//链表排序没用过 呵呵 转化为数组
        for(i=0;i<count;i++)
        {
                p=rear;
                newch[i]=rear->ch;
                rear=rear->next;
                free(p);
        }
        newch[count]='\0';
        for(i=0;i<count;i++)  //冒泡
    {
                for (j=0; j<count-i; j++)
        {
                        if (newch[j] > newch[j+1])
                        {
                                temp=newch[j];
                                newch[j]=newch[j+1];
                                newch[j+1]=temp;
                        }
                }
        }
        for (i=0; i<count; i++)           //输出最小数
    {
        printf("%c",newch[i+1]);
    }
           printf("\n");

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

}

[[italic] 本帖最后由 叶柄 于 2007-12-9 13:17 编辑 [/italic]]
2007-12-08 22:29
快速回复:求助分析:从键盘输入一个正整数,将该正整数中的每位数字重新排列,输 ...
数据加载中...
 
   



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

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