OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4701|回复: 3

[C语言作业提交] 给一个不多余5位的正整数输出位数,输出每一位,逆序输出个位数

[复制链接]

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2017-7-20
在线时间
26 小时
发表于 2017-7-24 13:25:22 | 显示全部楼层 |阅读模式
1, 给一个不多余5位的正整数,要求:
① 求出它是几位数;
② 分别输出每一位数
按逆序输出各位数字,例如原数是321,应输出123
编程思路:
   我是先判断他是几位数同时把每一位取出来,存到一个数组中,然后计算逆序输出的数,最后在输出位数,每一位,逆序输出的数;
我的代码:
int main()
{   
        u32 pdata;
        int num,reciprocal,temp;
        int final[5]={0};
        Stm32_Clock_Init(9);       
        uart_init(72,115200);        
        scanf("%d",&pdata);
        if(pdata>9999)
        {
                num=5;
                final[4]=pdata/10000;
                final[3]=pdata%10000/1000;
                final[2]=pdata%1000/100;
                final[1]=pdata%1000%100/10;
                final[0]=pdata%1000%100%10;
        }else
        if(pdata>999)
        {
                num=4;
                final[3]=pdata%10000/1000;
                final[2]=pdata%1000/100;
                final[1]=pdata%1000%100/10;
                final[0]=pdata%1000%100%10;
        }else
        if(pdata>99)
        {
                num=3;
                final[2]=pdata%1000/100;
                final[1]=pdata%1000%100/10;
                final[0]=pdata%1000%100%10;
        }else
        if(pdata>9)
        {
                num=2;
                final[1]=pdata%1000%100/10;
                final[0]=pdata%1000%100%10;
        }else
        if(pdata>0)
        {
                num=1;
                final[0]=pdata%1000%100%10;
        }
        reciprocal=final[0]*10000+final[1]*1000+final[2]*100+final[3]*10+final[4];
        printf("位数:%d\n",num);
        printf("它的每一位如下\n");
        for(temp=num-1;temp>=0;temp--)
        {
                printf("%d\n",final[temp]);
        }
        printf("逆序输出的数%d\n",reciprocal);

}
欢迎大家给出建议和指正,谢谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-7-24 15:37:55 | 显示全部楼层
是不是应该还有更加简单的代码可以解决.
个人感觉太复杂了.
回复 支持 反对

使用道具 举报

3

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
530
金钱
530
注册时间
2017-7-25
在线时间
188 小时
发表于 2017-7-25 11:51:29 | 显示全部楼层
要这么复杂么。。
[mw_shl_code=c,true]void XXX(u32 num)
{
        u8 i;
        u8 tmp[10];
        if(num == 0)
        {
                return;
        }
        i=0;
        memset(tmp, 0, 10);
        while((num>0) && (i<10))
        {
                tmp[i++] = num%10;
                num /= 10;
        }
        i=i; //数字长度,每个位存在tmp数组中
       
}[/mw_shl_code]
回复 支持 反对

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2017-7-20
在线时间
26 小时
 楼主| 发表于 2017-7-25 23:53:41 | 显示全部楼层
Ezel 发表于 2017-7-25 11:51
要这么复杂么。。
[mw_shl_code=c,true]void XXX(u32 num)
{

佩服!厉害!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-22 18:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表