# 1009题-[编程入门]数字的处理与判断-题解(C语言描述)
本题解的最终解释权归本人所有,主要用于本班上同学更好的掌握本题的解题方法,同时更好的理解和掌握方法。
------------
### 题目描述
给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123
------------
### 输入
一个不大于5位的数字
------------
### 输出
三行 第一行 位数 第二行 用空格分开的每个数字,注意最后一个数字后没有空格 第三行 按逆序输出这个数
------------
### 样例输入
12345
------------
### 样例输出
5
1 2 3 4 5
54321
------------
### 题目解释
1. 题目要求的第一个条件是:要输出这一个整数是几位数,我们可以通过判断这个数在哪个区间来达到程序的目的。
>例如,当n在10到99的区间内时,则该数为二位数;当n在100到999的区间内时,则该数为三位数,以此类推。
1. 题目要求的第二个条件是:要分别输出该数的每一位数字,我们可以通过运算来提取它的每一位数,这种运算分为**普通运算和特殊运算**。
- 普通运算指的是直接通过运算符来计算所在位数的值,并将值赋值给事先准备的变量当中;而特殊运算则指的是通过特殊的方法进行运算后,将值直接打印输出(这里提供的方法是***递归法***)。
1. 题目要求的第三个条件是:按逆序输出各位数字,例如原数为321,应输出123。我们可以通过循环语句,打印和更改赋值输出的顺序来达到程序的目的
>例如:n=389时,当满足n>0时的前提下,进行如下操作:
>1. 循环第一次,先打印个位数,也就是389%10,这样输出的就是个位数9,且排在了输出的第一位;再者,通过n/10去掉该数的的最低一位,也就是当前的个位数9,并将值赋值回n,n就等于38。
>1. 循环第二次,打印该数的个位数38%10即8,通过n/10去掉该数的的最低一位,也就是当前的个位数8,n就等于3。
>1. 循环第三次,打印该数的个位数3%10即3,再者,通过n/10去掉该数的的最低一位,n就等于0。
>因为n>0不满足,因此退出循环
------------
### 代码
```c
#include "stdio.h"
void prt(int x);//函数声明
int main(int argc, char* argv[])
{
int n;//定义一个整型变量n,n在这里作为用户输入的一个整数(不小于五位数)
int x=1;//定义一个整型变量x且赋初值为1,x在这里作为辅助程序运算操作
int i=1;//定义一个整型变量i且赋初值为1,i在这里作为输出位数的操作(计数)
scanf("%d",&n);//输入一个整数n
//第一步:求出它是几位数
while(n>=x)//循环判断:判断n是否大于x,成立则进行循环;不成立则进行下一条语句
{
if(n<=9)//特殊情况:当n<9时,输出1,表示该数为一位数
{
printf("1\n");
}
x=x*10;//进行特定条件的操作
i++;
if(n>=x && n<=x*10-1)//满足条件进行输出
{
printf("%d\n",i);
}
}
//第二步:分别输出每一位数字
prt(n);//调用自定义的prt子函数(该代码段实现的是每位数字进行分隔的程序操作)
printf("\n");
//第三步:逆序输出各位数字,例如原数为321,应输出123
while(n>0)
{
printf("%d",n%10);//打印出个位数
n=n/10;//去掉最低位并存回去
}
printf("\n");
return 0;
}
void prt(int x)//自定义一个void类型的prt子函数,实现 对每位数字进行分隔的程序操作
{
if(x>10)//满足x>10则进行递归;不满足输出结果
{
prt(x/10);//调用函数自身再进行运算(递归)
}
printf("%d ",x%10);//输出
}
```
------------
编写者:Believe_CH(廖智贤)
0.0分
3 人评分