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;
}
}
沒有留言:
張貼留言