解题思路和注意事项:首先要明白每个要求的操作思路,为了清楚点我们直接举具体的数: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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复