過去一週的網頁瀏覽次數

2011年12月13日 星期二

熊熊想到 - 10進為轉N進位

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;
}
}

沒有留言:

張貼留言