2011-03-11 2 views
2

Disons que j'ai un certain nombre comme 21 et je veux diviser pour que je reçois les numéros 2 et 1.Comment diviser un nombre à deux chiffres en C

Pour obtenir 1, je pouvais faire 1 mod 10. Donc, fondamentalement, le dernier chiffre peut être trouvé en utilisant le mod 10.

Pour obtenir 2, je pourrais faire (21 - (1 mod 10))/10.

Les techniques ci-dessus fonctionneront avec n'importe quel nombre à 2 chiffres. Cependant, permettez-moi d'ajouter une autre contrainte, ce mod ne peut être utilisé qu'avec des puissances de 2. Ensuite, la méthode ci-dessus ne peut pas être utilisée.

Que peut-on faire alors?

+2

Pourquoi la restriction sur mod? Et cela signifie-t-il que vous ne pouvez pas non plus utiliser des divisions entières? – Mat

+4

"mod ne peut être utilisé avec des puissances de 2" - cela sent comme les devoirs. –

+0

http://stackoverflow.com/questions/5189631/how-can--take-mod-of-a-number-in-assembly-in-motorola-m6800/5189800#5189800. Pour obtenir la réponse pour la division ainsi que le reste, vous définissez le bit approprié dans la réponse chaque fois que vous faites une soustraction. –

Répondre

8
2 == 23/10 
3 == 23 - (23/10) * 10 
+1

Notez que cela fonctionne parce que '23/10' est une division entière en C et retourne donc un entier arrondi (' 2'). – schnaader

0

Qu'en est-

x% 10 pour le second chiffre et x/10 pour la première?

+3

il ne peut pas utiliser 10 pour le module, seules les puissances de 2. relisent la question. –

+0

Vous devez également vérifier qu'il est <100. – Douglas

+0

La contrainte que seules les puissances de 2 sont utilisables a été ajoutée après que j'ai posté cette réponse. – tgmath

1

Pour obtenir 2, vous pouvez juste faire

int x = 23/10; 

se rappeler que la division entière laisse tomber la partie fractionnaire (car il ne peut pas être représenté dans un entier). La division du module (et la division régulière) peut être utilisée pour n'importe quelle puissance, et pas seulement pour les puissances de 2. Aussi, une puissance de deux n'est pas la même chose qu'un nombre à deux chiffres.

Pour diviser un numéro à trois chiffres

int first = 234/100; 
int second = (234/10)-first*10; 
int third = (234/1)-first*100-second*10; 

avec un peu de travail, il pourrait aussi ressembler à

int processed = 0; 
int first = 234/100-processed; 
processed = processed + first; 
processed = processed * 10; 
int second = 234/10-processed; 
processed = processed + second; 
processed = processed * 10; 
... and so on ... 

Si vous mettez un peu plus en elle, vous pouvez l'écrire comme une boucle assez facilement.

Questions connexes