N可以為任意數,EX 8, 16, 15...等等
我們在將一個十進位的數P轉換成2進位時,通常會用除法和餘數組合
令一個int Quotient = P/2
在令一個int Remainder = P%2
Remainder 是我們要個別的結果,我們可以用一個東西把它裝起來
EX : char sum[i] = Remainder ;
而P = P/2 後,進行下一輪計算
依此類推,一直做到 Quotient <=0
在表示上我們用一個容器把它裝起來,陣列是最簡單的。因為列印時會從左而右,所以不失一般性我們從陣列的最後面開始存資料,這樣一來從頭列印的時後就可以顯示成一般人都能讀取的結果。
把這種想法轉成code:
int end[SIZE]={0};
void tenToN(int a, int base)
{    
    int c=SIZE-1;
    int Remainder; //簡化code,Quotient省略
    while(a > 0)
    {
        Remainder = a % base;
        a = a / base;
        end[c--] = Remainder;
    }
}
但這code會遇到一個問題,如果要計算某個數的16進位表示法,結果可能有ABCDEFG...,int陣列就不能使用
陣列內容也不能單純的取Remainder的餘數,要轉換一下。
char end[SIZE]={0};
void tenToN(int a, int base)
{  
    int c=SIZE-1;
    int Remainder; //簡化code,Quotient省略
    while(a > 0)
    {
        Remainder = a % base;
        a = a / base;
        if(Remainder >= 10)
            Remainder = (Remainder-10)+65;  //'A' = 65
        else
            Remainder = Remainder+48;  //'0' = 48
        end[c--] = Remainder;
    }
}
 
沒有留言:
張貼留言