解题思路和注意事项:首先要明白每个要求的操作思路,为了清楚点我们直接举具体的数: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; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复