IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Multiplier des grands entiers


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut Multiplier des grands entiers
    Bonjour,

    Il y a quelques temps j'avais ouvert une discussion à propos de l'addition de grands entiers.
    Voici l'ancien post où le problème de base est expliqué : http://www.developpez.net/forums/d15...entiers-longs/

    Cependant, maintenant il faut que je fasse une multiplication.
    J'ai presque réussit, seulement il faut que je gère le "déplacement" de mes lignes intermédiaires. Ce déplacement, je pense qu'on peut le simuler, par un ajout de 0.
    C'est ce que j'ai fait, mais il y a un problème, car mon tableau n'est pas modifié quand je lui demande d'ajouter des 0. D'où peut provenir ce problème ?

    Merci d'avance.

  2. #2
    Membre actif
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    70
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 70
    Points : 204
    Points
    204
    Par défaut
    tu stockes bien tes nombres en binaire ?
    alors la multiplication par une puissance de 2 est rapide (un décalage+ report de bit)
    et on peut en profiter !
    exemple
    45*13 = 45*(8+4+1) = 45*8+45*4+45

    algo :
    resultat=0
    n1=45
    n2=13
    tant que n2 != 0
    n2 impair ? (dernier bit à 1)
    oui ->resultat+=val
    n1*=2 //on décale de 1 dans le sens des bits significatifs
    n2/=2 //on décale de 1 dans le sens des bits non significatifs
    fin "tant que"

    il ne te reste plus qu'a coder le fonction pour décaler les bits !
    En suivant cette algo, tu n'a pas de lignes intermédiaire

  3. #3
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 191
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 191
    Points : 17 150
    Points
    17 150
    Par défaut
    ajouter des zeros, c'est bien, mais il faut bien que ce soit un caractères '0' (zéro ascii), pas le caractère nul ('\0' qui vaut 0).
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. coder des grandes entier
    Par you.baddi dans le forum C
    Réponses: 3
    Dernier message: 01/01/2009, 02h33
  2. Réponses: 3
    Dernier message: 12/08/2007, 16h49
  3. Opération sur de grands entiers
    Par tutu dans le forum C
    Réponses: 16
    Dernier message: 24/05/2005, 08h56
  4. Warnings intempestifs (tout de suite des grands mots)
    Par Walm dans le forum C++Builder
    Réponses: 4
    Dernier message: 30/04/2004, 20h37
  5. Obtenir le plus grand entier !
    Par Gogoye dans le forum C
    Réponses: 3
    Dernier message: 09/12/2003, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo