Division

superoi Messages postés 17 Date d'inscription samedi 9 novembre 2002 Statut Membre Dernière intervention 8 décembre 2004 - 10 nov. 2002 à 09:51
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009 - 20 août 2004 à 18:49
bonjour en fait je doit realiser une calculatrice juste avec les operateur (+ - / * %) mais qui gere de grand chiffre (des chiffre de 10 000 digit par exemple) donc elle recoit une chaine de caractere et renvoie un chaine de caractere car ca ne tient pas dans un int

j'ai reussi a faire l'addition, la soustraction, la multiplication

et j'ai fait la division mais elle prend beaucoup de temps et surtout beaucoup trop de ram a cause des malloc

et en fait j'aimerais savoir si quelqu'un aurais une idee pour
pouvoir faire cette division rapidement

en fait moi ce que j'ai fait c'est fait c'est par exemple il y'a
10000 / 10

j'ai dit que le resultat etait egale a
la taille du premier chiffre(l1) - la taille du dexieme(l2) + 1 (meme ce n'est pas toujours vrai ca fait rien)

ensuite je fait 10 * 1000 (1000 pour ce que j'ai dit avant l1 - l2 + 1)
si il trouve un chiffre egale a 10000 c'est bon il l'affiche et si c'est plus grand il revient au chiffre d'avant et refais la meme chose en enlevent un 0 au chiffre

mais le prob c'est que si je fait 9999 / 1

ca fait 1 * 1000
1 * 2000
1 * 3000 .... jusqu'a 9000

ensuite 1 * 9100
1 * 9200 .....
en fait j'ai regler le probleme pour quand je divise par 1 il renvoi le premier chiffre directement mais c'est la meme chose quand je divise par 2 ca prend beaucoup de temps
la j'ai donner un petit chifre mais si je met 10000 9 dans mon chiffre ca ne marche plus car ca prend trop de ram et meme si ca marchai ca prendrai beaucoup trop de temps

voila en fait mon probleme si quelqu'un pouvais me donner une solution pour pouvoir faire ca beaucoup plus vite

5 réponses

cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
10 nov. 2002 à 12:33
-------------------------------
Réponse au message : Je pense qu'il faut revenir à la division comme en CE2. Il faut aussi être utile de se souvenir que a/b = a*1/b d'où calcul de l'inverse.
-------------------------------

bonjour en fait je doit realiser une calculatrice juste avec les operateur (+ - / * %) mais qui gere de grand chiffre (des chiffre de 10 000 digit par exemple) donc elle recoit une chaine de caractere et renvoie un chaine de caractere car ca ne tient pas dans un int

j'ai reussi a faire l'addition, la soustraction, la multiplication

et j'ai fait la division mais elle prend beaucoup de temps et surtout beaucoup trop de ram a cause des malloc

et en fait j'aimerais savoir si quelqu'un aurais une idee pour
pouvoir faire cette division rapidement

en fait moi ce que j'ai fait c'est fait c'est par exemple il y'a
10000 / 10

j'ai dit que le resultat etait egale a
la taille du premier chiffre(l1) - la taille du dexieme(l2) + 1 (meme ce n'est pas toujours vrai ca fait rien)

ensuite je fait 10 * 1000 (1000 pour ce que j'ai dit avant l1 - l2 + 1)
si il trouve un chiffre egale a 10000 c'est bon il l'affiche et si c'est plus grand il revient au chiffre d'avant et refais la meme chose en enlevent un 0 au chiffre

mais le prob c'est que si je fait 9999 / 1

ca fait 1 * 1000
1 * 2000
1 * 3000 .... jusqu'a 9000

ensuite 1 * 9100
1 * 9200 .....
en fait j'ai regler le probleme pour quand je divise par 1 il renvoi le premier chiffre directement mais c'est la meme chose quand je divise par 2 ca prend beaucoup de temps
la j'ai donner un petit chifre mais si je met 10000 9 dans mon chiffre ca ne marche plus car ca prend trop de ram et meme si ca marchai ca prendrai beaucoup trop de temps

voila en fait mon probleme si quelqu'un pouvais me donner une solution pour pouvoir faire ca beaucoup plus vite
0
superoi Messages postés 17 Date d'inscription samedi 9 novembre 2002 Statut Membre Dernière intervention 8 décembre 2004
11 nov. 2002 à 09:25
------------------------------- Réponse au message : ouais je croit que je vais essayer ca mais pour le a*1/b je croit pas que ca marcherais car on doit faire sans virgule donc 1/b 0 et apres a*0 0
ouais je pense que ca doit etre la seul solution de faire comme au CE2 mais en fait ce que je ne savais pas faire dans cette methode c'est pour faire un truc multibase car la calculatrice doit etre multibase mais je vais essayer

merci pour ta reponse
-------------------------------
0
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
11 nov. 2002 à 11:25
-------------------------------
Réponse au message : Calcule en base 10 et convertis ensuite en base n à l'aide des algos de conversion : tu divises ton nombre en base 10 par n et tu prends la suite inverse des restes pour obtenir le nombre en base n
-------------------------------

------------------------------- Réponse au message : ouais je croit que je vais essayer ca mais pour le a*1/b je croit pas que ca marcherais car on doit faire sans virgule donc 1/b 0 et apres a*0 0
ouais je pense que ca doit etre la seul solution de faire comme au CE2 mais en fait ce que je ne savais pas faire dans cette methode c'est pour faire un truc multibase car la calculatrice doit etre multibase mais je vais essayer

merci pour ta reponse
-------------------------------

-------------------------------
Réponse au message : Je pense qu'il faut revenir à la division comme en CE2. Il faut aussi être utile de se souvenir que a/b = a*1/b d'où calcul de l'inverse.
-------------------------------

bonjour en fait je doit realiser une calculatrice juste avec les operateur (+ - / * %) mais qui gere de grand chiffre (des chiffre de 10 000 digit par exemple) donc elle recoit une chaine de caractere et renvoie un chaine de caractere car ca ne tient pas dans un int

j'ai reussi a faire l'addition, la soustraction, la multiplication

et j'ai fait la division mais elle prend beaucoup de temps et surtout beaucoup trop de ram a cause des malloc

et en fait j'aimerais savoir si quelqu'un aurais une idee pour
pouvoir faire cette division rapidement

en fait moi ce que j'ai fait c'est fait c'est par exemple il y'a
10000 / 10

j'ai dit que le resultat etait egale a
la taille du premier chiffre(l1) - la taille du dexieme(l2) + 1 (meme ce n'est pas toujours vrai ca fait rien)

ensuite je fait 10 * 1000 (1000 pour ce que j'ai dit avant l1 - l2 + 1)
si il trouve un chiffre egale a 10000 c'est bon il l'affiche et si c'est plus grand il revient au chiffre d'avant et refais la meme chose en enlevent un 0 au chiffre

mais le prob c'est que si je fait 9999 / 1

ca fait 1 * 1000
1 * 2000
1 * 3000 .... jusqu'a 9000

ensuite 1 * 9100
1 * 9200 .....
en fait j'ai regler le probleme pour quand je divise par 1 il renvoi le premier chiffre directement mais c'est la meme chose quand je divise par 2 ca prend beaucoup de temps
la j'ai donner un petit chifre mais si je met 10000 9 dans mon chiffre ca ne marche plus car ca prend trop de ram et meme si ca marchai ca prendrai beaucoup trop de temps

voila en fait mon probleme si quelqu'un pouvais me donner une solution pour pouvoir faire ca beaucoup plus vite

:)
0
superoi Messages postés 17 Date d'inscription samedi 9 novembre 2002 Statut Membre Dernière intervention 8 décembre 2004
11 nov. 2002 à 16:52
-------------------------------
Réponse au message : ouais c'est ce que je vais faire merci pour ton aide
-------------------------------

-------------------------------
Réponse au message : Calcule en base 10 et convertis ensuite en base n à l'aide des algos de conversion : tu divises ton nombre en base 10 par n et tu prends la suite inverse des restes pour obtenir le nombre en base n
-------------------------------

------------------------------- Réponse au message : ouais je croit que je vais essayer ca mais pour le a*1/b je croit pas que ca marcherais car on doit faire sans virgule donc 1/b 0 et apres a*0 0
ouais je pense que ca doit etre la seul solution de faire comme au CE2 mais en fait ce que je ne savais pas faire dans cette methode c'est pour faire un truc multibase car la calculatrice doit etre multibase mais je vais essayer

merci pour ta reponse
-------------------------------

-------------------------------
Réponse au message : Je pense qu'il faut revenir à la division comme en CE2. Il faut aussi être utile de se souvenir que a/b = a*1/b d'où calcul de l'inverse.
-------------------------------

bonjour en fait je doit realiser une calculatrice juste avec les operateur (+ - / * %) mais qui gere de grand chiffre (des chiffre de 10 000 digit par exemple) donc elle recoit une chaine de caractere et renvoie un chaine de caractere car ca ne tient pas dans un int

j'ai reussi a faire l'addition, la soustraction, la multiplication

et j'ai fait la division mais elle prend beaucoup de temps et surtout beaucoup trop de ram a cause des malloc

et en fait j'aimerais savoir si quelqu'un aurais une idee pour
pouvoir faire cette division rapidement

en fait moi ce que j'ai fait c'est fait c'est par exemple il y'a
10000 / 10

j'ai dit que le resultat etait egale a
la taille du premier chiffre(l1) - la taille du dexieme(l2) + 1 (meme ce n'est pas toujours vrai ca fait rien)

ensuite je fait 10 * 1000 (1000 pour ce que j'ai dit avant l1 - l2 + 1)
si il trouve un chiffre egale a 10000 c'est bon il l'affiche et si c'est plus grand il revient au chiffre d'avant et refais la meme chose en enlevent un 0 au chiffre

mais le prob c'est que si je fait 9999 / 1

ca fait 1 * 1000
1 * 2000
1 * 3000 .... jusqu'a 9000

ensuite 1 * 9100
1 * 9200 .....
en fait j'ai regler le probleme pour quand je divise par 1 il renvoi le premier chiffre directement mais c'est la meme chose quand je divise par 2 ca prend beaucoup de temps
la j'ai donner un petit chifre mais si je met 10000 9 dans mon chiffre ca ne marche plus car ca prend trop de ram et meme si ca marchai ca prendrai beaucoup trop de temps

voila en fait mon probleme si quelqu'un pouvais me donner une solution pour pouvoir faire ca beaucoup plus vite

:)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009
20 août 2004 à 18:49
Essaye l'algorithme suivant :
' On cherche k tel que 2^(k-1)×b <= a < 2^k×b ,
' et on enregistre au passage les 2^i×b .

' On a k tel que 2^(k-1)×b <= a < 2^k×b .

' On redescend de proche en proche.
' a =2B×Q + R donne :
' Cas 1: R < B alors q=2Q et r=R
' Cas 2: R = B alors q=2Q + 1 et r=R - 2B/2
' Cas 3: R > B alors q=2Q + 1 et r=R - 2B/2

' Pour redescendre, on commence avec
' B=2^(k-1)×b et donc forcément R=0.
' Ceci initialise la boucle.

C'est plus rapide que la méthode apprise à l'école primaire.

N'hésites pas en si tu souhaites avoir des précisions, ou bien pour avoir une version VBA.
0
Rejoignez-nous