即時閱讀有關ň算法的基極b擴張和這本書真的很難閱讀和理解,我不知道什麼底部指...基極b擴張
它返回n還是什麼?你會怎麼做這個...感謝
some method (n,b)
if b == 0
return 1
q = n
k = 0
while q does not == 0
a[k] = q % b
q = q/b
k = k + 1
return ???
即時閱讀有關ň算法的基極b擴張和這本書真的很難閱讀和理解,我不知道什麼底部指...基極b擴張
它返回n還是什麼?你會怎麼做這個...感謝
some method (n,b)
if b == 0
return 1
q = n
k = 0
while q does not == 0
a[k] = q % b
q = q/b
k = k + 1
return ???
我在函數中爲C寫了一個實現。它使用一個指針作爲輸入參數,輸出(一個整數向量)將被放置。該函數還返回一個整數 - 矢量的邏輯大小。
#include <assert.h>
int toBase(int n, int b, int* answer) {
assert(b > 1);
q = n
k = 0
while (q != 0) {
answer[k] = q % b;
q /= b;
++k;
}
return k;
}
int main() {
int answer[32];
int n = 100000;
int b = 2;
int answerSize = toBase(n, b, answer);
// use answer and answerSize
return 0;
}
另一種方式來做到這一點(不指針參數)是爲函數內的向量分配內存並返回它,需要調用函數處理完之後,釋放所用的存儲器。
在這種情況下,您無法判斷向量的邏輯大小,因此您必須將answer [k]設置爲特殊值(此處爲-1),以知道向量結束的位置。
#include <assert.h>
int* toBase(int n, int b) {
assert(b > 1);
int* answer = malloc(33 * sizeof(int));
q = n
k = 0
while (q != 0) {
answer[k] = q % b;
q /= b;
++k;
}
answer[k] = -1;
return answer;
}
int main() {
int n = 100000;
int b = 2;
int *answer = toBase(n, b);
// use answer
free(answer);
return 0;
}
更優雅的解決方案(在C++中)是使用STL向量類。
這個算法背後的想法是,它創造價值一個ķ的列表, K-1,一個 K-2 .. 。,a 。最後,它想要返回值列表,並以一個看起來像數字的base-b表示的形式進行操作。
例如,如果您輸入33進入該算法,並要求其基-16表示,該算法將設置該算法的一個 = 2和 = 1返回值是則表示21,其是(2),接着是(1)。
他們使用的表示法只是用於「返回由此算法生成的值列表」的花哨數學表達式。您可以將其視爲返回數字的基數b數組的數組。
希望這會有所幫助!
感謝您解釋...我欣賞它 – Manual 2013-02-11 02:44:31
非常感謝你!現在我完全瞭解它...驚人 – Manual 2013-02-11 01:41:20