对十进制数字的按位输出,取反,并求其位数

 如何对一些数字需要输出,取反,求其是几位数

//求十进制数字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");
}



猜你喜欢

转载自blog.csdn.net/Pluto_God/article/details/79711131