對十進位制數字的按位輸出,取反,並求其位數
阿新 • • 發佈:2018-12-04
如何對一些數字需要輸出,取反,求其是幾位數
//求十進位制數字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");
}