解题思路和注意事项:首先要明白每个要求的操作思路,为了清楚点我们直接举具体的数:123


第一个要求几位数,那么就是将123除以10,123是三位数字,123能除以10两次,那么将变量count初始化为1,加上2次就是3,使用while循环,count++就是进行count初始化的值加1,当然这里要和++count区分开,结果是相同的但是两者不一样,这里不过多赘述。


第二个要求正序分解,要注意的是前面的数字之间都有空格但是最后一位数字后面没有,那么就会有一个循环在做空格,满足一定条件就不输出空格,123的正序分解为1 2 3那一开始将最高位分解出来就要123除以100分解出来1,然后输出,但这100从哪里来,这就要我们在第一个while循环里用一个变量mask初始化为1,循环一次就乘以一次10,循环两次是100,就达到了我们的目的,那么将123除以100分解出来1之后输出1,然后打印空格,而下次我们应该用的是23除以10,所以要进行2个操作,一个是将123取除以100的余数,一个是将mask除以10,这样就能得到23和10,分解出来2,然后再循环一次,我们就能分解出来3,mask的值就为1了,我们重新看这个空格要求,我们的循环也就能出来了,当mask大于9输出空格,小于9则脱离循环,也就完成了第二个要求。


第三个要求逆序输出,我们对一个数%10时,可以获取到这个数的个位上的数字,123%10就等于3,那接下来就需要12,对一个数除以10的倍数,可以消掉多余的数字,则将123除以10,就能得到12,那循环操作得到的就是2,1,而我们知道123逆序输出后为321,那么3就是百分位,2就是十分位,1是个位,就要让3乘以100,将2乘以10,但也可以这么想,先输出3,后乘以10加上这个2,就得到32,再循环一次就能得到321,n<=0时就停止循环,将结果输出。


参考代码:


#include<stdio.h>
int main()
{
	int x;
	scanf("%d",&x);
	int count=1;
	int mask=1;
	int t=x;
	int n=x;
	while(t>9){
		t/=10;
		mask*=10;
		count++;
	}
	printf("%d\n",count);

	do{
		int d=x/mask;
		printf("%d",d);
		if(mask>9){
			printf(" ");
		}
		x%=mask;
		mask/=10;
	}while(mask);
	
	int digit;
	int ret=0;
	while(n>0){
		digit=n%10;
		ret=ret*10+digit;
		n/=10;
	}
	printf("\n%d",ret);

	return 0;
}


点赞(5)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论