如何对一些数字需要输出,取反,求其是几位数
//求十进制数字n的数字位数
//我们要求一个数字的位数,可以先从他的个位开始统计,step1:判断这个数字n整除10 是否为0,如果为零,则它是个个位数,如果不为0,则它至少是个两位数。step2:我们则给它的位数+1。step1:将n/10后的值赋值给n,例如:1234/10=123. 重复以上步骤
/*int GetFigures1(int n)
{
int i;
for(i=0;n!=0;i++)
{
n/=10;
}
return i;
}*/
如果用for语句求数字0的位数,数字0无法计入循环,i的值为0。则输出0的位数为0,利用do while刚好解决这个问题
int GetFigures(int n)
{
int count=0; //首先需要定义一个整型常量来储存数字的位数,定义一个 count
do //利用do while语句可以避免for语句求0的位数的时候出现的漏洞
{
count++; //位数+1
n/=10; //丢弃最后一位数字
}while(n!=0);
return count;
}
//逆序输出十进制数字n,如123456->654321
void PrintReverse(int n)
{
if(n<0) //如果n为负数,将n的绝对值赋值给n,将负整数数转为正整数
{
printf("-"); //输出一个负号
n=-n;
}
do
{
printf("%d",n%10); //依次输出最后一位数字
n/=10; //输出后将最后一位数字丢弃
}while(n!=0);
printf("\n");
}
//顺序输出十进制数字n,如123456->123456
通过求十进制数字n的数字位数我们可以知道如何输出最后一位,舍弃最后一位。同理我们也可以输出一个数字n的首位,然后舍弃首位,只是不同的是前者是整除10。后者是整除10的count-1次方,然后再对10的count-1次方取余,最后10 的count-1次方对10取余,依次循环直到n==0时结束循环
例如:123456整除10 的6-1次方为1(123456/100000=1),
123456对10 的6-1次方求余等于23456(123456%100000=23456),
10的6-1次方整除10 等于10000,23456再整除10000,然后再对10000取余,依次循环,直到最后数字为0
void PrintOrder(int n)
{
int count=GetFigures(n); //定义一个常量count接收调用函数GetFigures()的值
int tmp=1;
for(int i=1;i<count;i++) //求10的(count-1)次方
{
tmp*=10; //将10的(count-1)次方的值赋值给tmp
}
do
{
printf("%d ",n/tmp); // 取最高位
n%=tmp; //丢最高位
tmp/=10; //将tmp的位数减一
}while(n!=0);
printf("\n");
}