|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 4 ![]() |
Bonjour !
Je dois coder en Pascal mon propre type Bigint et notamment des procédures permettant d'additionner/soustraire/multiplier/diviser deux Bigint. (je ne sais pas si je suis clair...) Pour cela, je prends les deux nombres à additionner/soustraire/etc... sous forme de chaînes que je rentre ensuite dans deux tableaux en les inversant. (exemple: 123456=> 0654321 (le zéro correspond au signe du nombre, 0=positif 1=négatif) J'ai réussi l'addition et la soustraction mais je n'arrive pas du tout à coder la multiplication, j'ai essayé plusieurs méthodes mais rien ne marche :/ help! |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Inscription : août 2006 Messages : 3 414 ![]() |
Rai,
Tu fais exactement comme tu calcules à la main. En tenant compte du fait qu'une case de ton tableau BigInt correspond pour nous à un chiffre quand on calcule manuellement. Ce n'est pas vraiment difficile, mais attention aux bugs, les plus courants étant (en ne prenant en compte que ceux qui sont spécifiques) : - oublier de tenir compte du signe des nombres - oublier les retenues - si on les a prises en compte, oublier de mettre à jour le "chiffre" - oublier de mettre à jour la longueur réelle du nombre, si le calcul l'a modifiée
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 395 ![]() |
je me suis amusé il y a quelques temps à créer une unité StrMath qui travaille sur des BigInt sous forme de string #0, #1, #2...#255, #1#0 valant 256 évidemment
et comme le dit droggo ce n'est pas plus compliqué que ce qu'on fait à la main, sauf qu'on travaille en base 256 et non en base 10...et que ce n'est pas très optimisé, il est plus efficace de garder le même principe avec des entiers sur 32 ou 64 bits. pour la multiplication et la division, au pire, il suffit de les transformer en addition et soustraction sachant que 3 x 4 = 4 + 4 + 4, et que 12 / 4 donne 12 - 4 - 4 - 4, soit 3 fois -4 avant d'atteindre 0
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 4 ![]() |
Effectivement j'avais fait une erreur totalement débile au niveau de la retenu..pardon pour la perte de temps ^^
|
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 4 ![]() |
Bon finalement je n'y arrive toujours pas
Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre expérimenté
![]() ![]() Titouan Créac'hEpitech Inscription : mai 2009 Messages : 249 ![]() |
On a eu un projet qui ressemble à ça en c
Tu doit vraiment poser ton calcul à main et réussir à le traduire en algo. |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 4 ![]() |
J'ai tout repris bien proprement et effectivement ça marche
|
|
|
00
|
|
|
#8 | ||
![]() ![]() Inscription : juillet 2007 Messages : 1 296 ![]() |
Salut,
Encore dans l'esprit de Noël, je partage le code source d'une unité BigInt que j'ai codée pendant "mes ages de folie" pour faire de la cryptographie RSA sous Turbo Pascal. L'unité comprend les opérations suivantes : Code :
|
||
|
|
20
|
Copyright © 2000-2013 - www.developpez.com