C'est la deuxième fois que je reçois des résultats confus de l'opérateur modulo, donc je suis sûr que je dois manquer quelque chose sur comment ça marche, qu'est-ce que je fais mal ici qui me donne les mauvaises réponses? Cette fonction est supposée prendre un nombre et retourner ses chiffres comme un pointeur vers un tableau (où le premier élément dit combien de chiffres il est long). Qu'est-ce que cela fait est retourne un tableau où tous les index après le premier contiennent le numéro d'origine.Qu'est-ce qui me manque à propos de l'utilisation de l'opérateur modulo?
int *getDigits(int n)
{
int digits = log10(n)+1;
int i = 1;
int *digit = malloc((digits+1) * sizeof(int));
if (digit == NULL) { printf("error\n"); }
digit[0] = digits;
for (i = 1; i < digits+1; i++) {
int blah = (int) pow(10,i);
printf("digit[%d] = remainder of %d divided by %d\n",i,n,blah);
digit[i] = (n%blah);
printf("%dth digit %d\n",i,n);
}
return digit;
}
Lorsque je l'exécute chaque itération ressemble à quelque chose comme ceci:
checking 500996
digit[1] = remainder of 500996 divided by 10
1th digit 500996
digit[2] = remainder of 500996 divided by 100
2th digit 500996
digit[3] = remainder of 500996 divided by 1000
3th digit 500996
digit[4] = remainder of 500996 divided by 10000
4th digit 500996
digit[5] = remainder of 500996 divided by 100000
5th digit 500996
digit[6] = remainder of 500996 divided by 1000000
6th digit 500996
Notez que vous ne devez pas utiliser 'pow' pour cela, car il n'y a aucune garantie que le résultat sera exact; la conversion ultérieure en nombre entier peut entraîner '99 ... 9' sur certaines plates-formes (ou d'autres valeurs). Vous pouvez garantir un résultat précis en multipliant à plusieurs reprises par '10' (ce sera aussi plus rapide). –