2010-09-13 28 views
2

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 
+0

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). –

Répondre

3

Vous stockez le résultat du modulo chiffres [i], mais vous n'imprimez pas:

digit[i] = (n%blah); 
printf("%dth digit %d\n",i,n); 

n % blah ne modifie pas n ou bla, il ne renvoie que le résultat.

+0

OH LOL, je suis un tel crétin. – girlygirl

1

Il semble que vous êtes toujours l'impression de votre entrée:

printf("%dth digit %d\n",i,n);