给一个不多于5位的正整数,要求:
- 求出它是几位数;
- 分别输出每一位数字;
- 按逆序输出各位数字,例如原数为321,应输出123
一、问题描述及源程序
题目中体现了编程中常用的对数据进行简单处理的基本方法,核心是得到与丢弃,即输出我们想要的数字信息,丢弃某位的数字再重新运算来获取下一个我们想要的数字信息。
//第1问 统计一个整数n是几位数
int GetFigure(int n){
int i=0;
while(n!=0){
n/=10;
i+=1;
}
return i;
}
针对第1问,n/=10就是丢弃末位数字的过程,每丢弃一位计数器加一,直到最后一位也被丢弃。最终计数器表示的就是这个整数的位数。
//第2问 逆序输出这个整数每一位数字
void PrintReverse(int n){
int m;
while(n!=0){
m=n%10;
n/=10;
printf("%d ",m);
}
}
针对第2问,比第1问多了一个得到的过程,输出最后一位后再丢弃,输出n%10就是得到最后一位数字的过程,n/=10丢弃末位获得新的n值。循环这个过程直到输出所有数字。
void PrintOrder(int n){
int i=GetFigure(n);
int m;
do{
m=pow(10.0,i-1);
i-=1;
printf("%d",n/m);
n%=m;
}while(n!=0);
}
针对第3问,顺序输出比逆序输出稍复杂一些,需调用统计位数的函数,因为n不再整除10,而是根据它的位数而定的。例如最高位是万位,要获取万位数,n就除以,且对 求余来丢弃最高位,以此类推,顺序输出每一位数字。
二、总结
整除和求余是用于处理数据的基本方法,需注意每次执行完一次得到或丢弃过程,要再次更新除数或被除数的值,防止造成死循环。