| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1031 人关注过本帖
标题:这个不会,求解
只看楼主 加入收藏
A2250547376
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-3-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
这个不会,求解
给一个不多于5位的正整数,要求
1:求出它是几位数
2:分别输出每一位数字
3:按逆序输出各位数字,
搜索更多相关主题的帖子: 正整数 
2016-03-15 10:27
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:5 
求答案是不好的。
int main()
{
    int i, j, count,math;
    int a[5] = { 0 };
    scanf_s("%d",&math);
    count = 0;
    j = math;
    if ((math > 99999) || (math <= 0))
    {
    printf("输入的数字不符合要求!\n");
    return 0;
    }
    for (i = 0; i < 5; i++)
    {        
        if (j != 0)
        {
            count++;
        }
        a[i] = j % 10;
        j = j / 10;
        
    }

    printf("%d是%d位数\n", math, count);
    printf("正序分别是:\n");
    for (i = 0; i < count; i++)
    {
        printf("%d\n",a[i]);
    }
    printf("逆序分别是:\n");
    for (i = count-1; i >= 0; i--)
    {
        printf("%d\n", a[i]);
    }
    return 0;
}

[此贴子已经被作者于2016-3-15 10:53编辑过]

2016-03-15 10:47
nametayu
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2016-3-15
收藏
得分:5 
int x;
int i=1;
while(scarf("%d",&x)!=eof)
    {
        if(x>99999)
        {
            printf("超出范围/n")
            break;
        }
        else
        {
            while(y=0)
            {
               
                if(x/i=0)
                {
                    y=0;
                    
                    printf("是%d位数",i-1);
                }
                else
                {
                    i=i*10;
                }
        }
        int a[i-1];//忘记这里可不可以这样写,如果不可以可以把i-1换成一个固定的数字。i-1表示是位数
        for(sum=0;sum<=i-1;sum++)
        {
        a[sum]=x/(i-1);
        printf("a[sum]")
        i--;
        }
        for(;sum>=0;sum--)
        printf("%d",a[sum]);
    }


初学者,写错了也勿喷!
2016-03-15 10:55
nametayu
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2016-3-15
收藏
得分:0 
回复 3楼 nametayu
大概就只这个意思,运行不出来就看看意思吧。。。
2016-03-15 11:03
nametayu
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2016-3-15
收藏
得分:0 
我卡了下错误,一、if(==)少一个等号,二、frintf("%d",a[sum]),三、中英符合。还有丢;的,没有再sde里写全是错哈哈
2016-03-15 11:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
程序代码:
/*
來源: http://bbs.bccn.net/thread-462513-1-1.html

给一个不多于5位的正整数,要求
1: 求出它是几位数
2: 分别输出每一位数字
3: 按逆序输出各位数字
*/

#include <stdio.h>

int main(void)
{
    unsigned int number;
    char str[6];
    size_t length;
    size_t index;

    while (scanf_s("%u", &number) != 1)
    {
        rewind(stdin);
    }
    length = sprintf_s(str, "%u", number);
    printf_s("Length = %u\n", length);
    for (index = length; index > 0; --index)
    {
        putchar(str[index - 1]);
        putchar('\n');
    }

    rewind(stdin);
    getchar();
}

授人以渔,不授人以鱼。
2016-03-15 12:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
/*
來源: http://bbs.bccn.net/thread-462513-1-1.html

给一个不多于5位的正整数,要求
1: 求出它是几位数
2: 分别输出每一位数字
3: 按逆序输出各位数字
*/

#include <stdio.h>

int main(void)
{
    unsigned int number;
    size_t length;
    size_t index;

    while (scanf_s("%u", &number) != 1)
    {
        rewind(stdin);
    }
    for (length = 0; number > 0; ++length)
    {
        printf_s("%d\n", number % 10);
        number /= 10;
    }
    printf_s("Length = %u\n", length);

    rewind(stdin);
    getchar();
}


爲什麽這個版本要把幾位數在最後輸出呢?如果一定要先輸出這個,那麽這個算法還好嗎?第一個版本是否有這種限制?它的限制又在哪裏?

[此贴子已经被作者于2016-3-15 12:41编辑过]


授人以渔,不授人以鱼。
2016-03-15 12:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這種程序用遞歸是最低劣的方案,不但效率低,而且邏輯不清晰、可讀性差,甚至連代碼行數都沒省出來。

授人以渔,不授人以鱼。
2016-03-15 12:48
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:5 
以下是引用grmmylbs在2016-3-15 10:47:44的发言:

求答案是不好的。
int main()
{
    int i, j, count,math;
    int a[5] = { 0 };
    scanf_s("%d",&math);
    count = 0;
    j = math;
    if ((math > 99999) || (math <= 0))
    {
    printf("输入的数字不符合要求!\n");
    return 0;
    }
    for (i = 0; i < 5; i++)
    {        
        if (j != 0)
        {
            count++;
        }
        a = j % 10;
        j = j / 10;
        
    }

    printf("%d是%d位数\n", math, count);
    printf("正序分别是:\n");
    for (i = 0; i < count; i++)
    {
        printf("%d\n",a);
    }
    printf("逆序分别是:\n");
    for (i = count-1; i >= 0; i--)
    {
        printf("%d\n", a);
    }
    return 0;
}




对的,求答案是不好的,在下认为,用字符数组会更简便一点,用两个循环就能解决楼主的2个问题,具体的我不写了,楼主自己琢磨琢磨

好好学习,天天向上!
2016-03-15 18:45
快速回复:这个不会,求解
数据加载中...
 
   



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

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