
Envoyé par
Solkien
Goten, je n'arrive pas a te suivre.
Tu dis que tonEntierAdecouper est un entier. Mais une des difficultés de ce projet est de prendre en entrée de grands entiers. Ces entiers sont tellement grands qu'il ne rentre pas dans un int (et plus généralement dans aucun type primitif).
C'est pour cela qu'une solution est de prendre en entrée un chaine de caractère potentiellement tres grande. Dans ton cas, tu découpe un int (qui par définition n'a pas besoin d'etre découper) en d'autres entiers plus petits.
Seulement il est aussi traditionnel d'avoir un constructeur prenant en compte un entier.. Pourquoi? parce qu'il arrive souvent d'avoir un entier en entrée PUIS d'avoir des opérations à effectuer dessus qui feront un dépassement de capacité de l'entier. Enfin, ça permet de faire des conversions (implicite celà dit), dans des cas où tu écrirais par exemple:
tonMint + unEntierQuelconque // ici le constructeur prenant un entier est appelé implicitement

Envoyé par
Solkien
Marbouchi : si tu veux un code simple, utilise le principe de Goten qui consiste a considérer un vecteur d'entier compris entre 0 et 9. Tu as une relation très simple entre cette représentation et sa représentation en base 10.
Si tu veux un code efficace, il est beaucoup plus efficace de travailler dans une base tenant dans un mot machine. Si cette valeur est B, tu auras un vecteur d'entier compris entre 0 et B-1. Ton grand entier vaudra alors :
Mint[0] + B*Mint[1] + B^2*Mint[3] + ...
Mais si tu veux afficher ton entier, il faudra travailler pour le convertir vers la base decimal.
Je tiens tout de même a préciser : Goten, tu dis que manipuler une base décimale est la plus utilisée. C'est peut être vraie pour les personnes qui apprennent le langage, mais aucune classe de grands entiers sérieuses ne travaille en base décimale (tu troques une facilite d'implémentation (qui est surtout une facilite mathématique) contre une très grosses pertes de performances). A la limite, tu peux travailler dans une base B avec B la plus grande puissance de 10 qui tient dans un type primitif d'entier (int, long, ...).
Je suis tout à fait d'accord, et c'est justement pour ça que j'ai parlé de la plus utilisée, c'est par rapport à ce contexte, apperemment le posteur débute en C++, donc la représentation la plus simple et la plus rapide était la plus adéquate amha.
Surtout qu'à mon avis ce n'est qu'un exercice, ça n'a pas un but final d'être utilisé en production. Donc autant ce focalisé sur les détails purement C++ que sur des considérations de l'ordre de la vitesse ou autre.
Mais après je te l'accorde dans un code visant à être utilisé intensivement la représentation que j'ai donné n'est vraiment pas approprié, mais de toute façon pour ce genre de chose je n'irais pas réinventé la roue et j'utiliserais GMP par exemple..
Partager