J'ai écrit une implémentation en C pour la fonction. Il utilise un pointeur comme paramètre d'entrée, où la sortie (un vecteur d'entiers) sera placée. La fonction renvoie également un entier - la taille logique du vecteur.
#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;
}
Une autre façon de le faire (sans le paramètre de pointeur) est à allouer de la mémoire pour le vecteur à l'intérieur de la fonction, et le retourner, ce qui nécessite la fonction d'appel pour libérer la mémoire utilisée après son traitement fini.
Dans ce cas, vous ne pouvez pas indiquer la taille logique du vecteur, vous devez donc définir la réponse [k] sur une valeur spéciale (-1 ici) pour savoir où s'arrête le vecteur.
#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;
}
Une solution plus élégante (en C++) consiste à utiliser la classe de vecteur STL.
merci beaucoup! ... maintenant je comprends tout à fait ... incroyable – Manual