PTA 7-2 逆序的三位数——MZH

题目:题目链接

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:

每个测试是一个3位的正整数。

输出格式:

输出按位逆序的数。

输入样例:

123

输出样例:

321

代码实现:

最简单的思路是直接提取各位的数字然后合成一个新的是三位数输出

具体讲解详见代码注释

#include<stdio.h>
int main()
{
    int a,b,c,d;
    scanf("%d",&a);
    b=a/100;//提取百位数
    c=(a/10)%10;//提取十位数
    d=a%10;//提取个位数
    printf("%d",d*100+c*10+b);
    return 0;
}

稍微复杂的是将各位数字全部提取出来,对零进行判断,非零的数直接输出

#include<stdio.h>
int main()
{
    int a,b[10]={0},num=0;
    int flag=0;//一开始想用bool,但是。。。用于判断开头是不是0
    scanf("%d",&a);
    while(a>0)//提取个位数字
    {
        b[num]=a%10;
        num++;//计数变量,用于填充数组
        a=a/10;//下一位
    }
    for(register int i=0;i<num;i++)
    {
        if(flag==0)
        {
            if(b[i]!=0)//开头不是零正常输出
            {
                flag=1;//表示开头不是零
                printf("%d",b[i]);
            }
            if(b[i]==0)//如果开头是零
            {
                continue;//继续循环
            }
        }
        else
        {
            printf("%d",b[i]);//以判断过开头就继续输出
        }
    }
    return 0;
}

这个已经不限于三位数,但是由于使用循环实现的,如果数据太大可能会超时间。。。

还有一个基于第二种方法功能更加强大的代码,但实际上大同小异,可以帮助理解第二种方法。

#include <stdio.h>

int main() {
	int a, num[10], pos = 0;
	scanf("%d", &a);
	while (a > 0) {
		pos++;
		num[pos] = a % 10;
		a = a / 10;
	}
	printf("%d\n", pos);
	for (register int i = 1; i <= pos; i++) {
		printf("%d", num[i]);
	}
	printf("\n");
	for (register int i = pos; i >= 1; i--) {
		printf("%d ", num[i]);
	}
	return 0;
}

就酱哈(待更新)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值