一、输出整数的位数
运用“去尾法”获取整数n的位数。“去尾法”是将整数n/10后重新赋值给n,将n的小数部分去掉(利用整数除以整数)。
每进行一次赋值,计数器+1,直到整数n被赋值为0后,计数器停止计数,此时计数器的数字为整数n的位数。
考虑当整数为0时,运用do-while循环语句可以进入循环。
源代码:
int GetFigures(int n)
{
int count=0; //计数器
do
{
n=n/10; //“去尾法”,对n进行赋值
count++; //去掉一位,计数器+1
}while(n!=0); //当n被赋值为0时停止循环
return count;
}
二、逆序输出数字
运用整数n%10可以得到余数,然后运用“去尾法”将数字缩小10倍,直到n==0时,退出循环。
源代码:
void PrintReverse(int n)
{
if(n<0) //对负整数的处理,当整数n小于0时,输出一个“-”号
{
printf("-");
n=-n;
}
do
{
printf("%d ",n%10); //输出整数的各位
n=n/10; //去尾法”,对n进行赋值
}while(n!=0); //当n被赋值为0时停止循环
printf("\n");
}
三、顺序输出数字
顺序输出数字需要从高位开始进行计数,所以就需要获得这个数字的位数,我们可以调用GetFigures(int n)函数。
最高位数字=(整数n)除以(权重),而权重就是10的位数-1次方。
再利用n%(10的n的位数减一次方)去掉n的最高位,如此进行循环,直到n==0时退出循环。
源代码:
void PrintOrder(int n)
{
int tmp;
tmp = GetFigures(n); //调用GetFigures函数
int power=1;
if(n<0) //当整数n为负数时,输出一个“-”号
{
printf("-");
n=-n;
}
for(int i=0;i<tmp-1;i++) //权重:10的n的位数减一次方
{
power *= 10;
}
do
{
printf("%d ",n/power); //打印最高位数
n = n%power; //去掉最高位
power /= 10; //一次循环结束,权重降低
}while(n!=0); //当n被赋值为0时停止循环
printf("\n");
}