1. 程式人生 > >對十進位制數字的按位輸出,取反,並求其位數

對十進位制數字的按位輸出,取反,並求其位數

 如何對一些數字需要輸出,取反,求其是幾位數

//求十進位制數字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");
}