begin process at 2012 02 10 18:37:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Probleme inconnu


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme inconnu

lundi 17 novembre 2008 à 17:02:30 | Probleme inconnu

adil1251985

salut tout le monde, je suis entrain de developper un programme qui calcule le produit de deux grands nombres,

pour cela j'ai pas travaillé avec des int mais plutot avec des string (chaine de caraccteres).
 je pense qu'au niveau de conception y a pas de probleme .
alors mon probleme se manifest au cas où je tape un grand nombre pour le premier argument (exp 222222) le programme sort son afficher acun resultat. 

voila mon code

 

fichier .h

#ifndef _BIGINT_
#define _BIGINT_

#include <string>
#include <iostream>

using namespace std;

class BigInt {
              
      public:
             string number; // variable de type string pour maniupler les grands chiffres
             BigInt(){}; // constructeur par defaut
             BigInt(string s); // constructeur aves un argument de type string
             friend ostream& operator<<(ostream&, const BigInt&); // surcharge de l'operateur " << "
             friend istream& operator>>(istream&, BigInt&); // surcharge de l'operateur " << "
             friend BigInt operator +(BigInt bUn , BigInt bDeux); // surcharge de l'operateur " + "
             friend BigInt operator -(BigInt bUn , BigInt bDeux); // surcharge de l'operateur " - "
             friend BigInt calculerMulti(BigInt , BigInt); // fonction amie pour calculer la multiplication
             int getnumber(string); // fonction membre qui retourne le nombre de chiffre dans le nombre
             };
#endif

fichier .cpp

#include <iostream>
#include <stdlib.h>
#include "bigInt.h"
#include <sstream>
#include <conio.h>

    BigInt::BigInt(string s){
            number = s ;   
    }
   
    ostream& operator <<(ostream& out, const BigInt& b){
           out << b.number ;
           return out;
    }
   
    istream& operator >>(istream& in, BigInt& b){
          in >> b.number;
          return in;
    }
   
    BigInt operator +(BigInt bUn,BigInt bDeux){
            BigInt resultatF;
            int TbUn,TbDeux,retenu=0,compteur=0,aide1,aide2,resultat;
            string s1,s2;
            s1 = bUn.number;
            s2 = bDeux.number;
            TbUn = s1.length();
            TbDeux = s2.length();
            // créer un flux de sortie
            ostringstream oss;
                   if (TbUn>TbDeux)
                   {
                      for(int r=0; r<(TbUn-TbDeux); r++){
                      s2 = "0" + s2;
                      }
                   }
                   else
                   {
                       for(int r=0; r<(TbDeux-TbUn); r++){
                       s1 = "0" + s1;
                       }
                   }
                  
            TbUn = s1.length();
            char *tab1 = (char *)s1.c_str();
            char *tab2 = (char *)s2.c_str();
            int tabResultat[TbUn];     
                   for(int j=TbUn-1; j>=0; j--)
                   {
                           aide1 = (int)(tab1[j]-'0');
                           aide2 = (int)(tab2[j]-'0');
                           resultat = aide1 + aide2 + retenu;
                           if (resultat>=10 && j!=0)
                           {resultat = resultat-10;retenu = 1;}
                           else retenu = 0;
                           tabResultat[compteur++]= resultat;   
                   }
           
                   for(int j=TbUn-1; j>=0; j--)
                   {oss << tabResultat[j];}           
            resultatF.number = oss.str();
            return(resultatF);
    }
   
    BigInt operator -(BigInt bUn , BigInt bDeux){
           BigInt resultatF;
           int TbUn,TbDeux,retenu=0,compteur=0,aide1,aide2,resultat;
           string s1,s2;
           bool TenZero;
           s1 = bUn.number;
           s2 = bDeux.number;
           TbUn = s1.length();
           TbDeux = s2.length();
           ostringstream oss;
                   if (TbUn>TbDeux)
                   {
                      for(int r=0; r<(TbUn-TbDeux); r++){
                      s2 = "0" + s2;
                      }
                   }
                   else
                   {
                       for(int r=0; r<(TbDeux-TbUn); r++){
                       s1 = "0" + s1;
                       }
                   }
                  
           TbUn = s1.length();
           char *tab1 = (char *)s1.c_str();
           char *tab2 = (char *)s2.c_str();
           int tabResultat[TbUn];     
                   for(int j=TbUn-1; j>=0; j--)
                   {
                          aide1 = (int)(tab1[j]-'0');
                          aide2 = (int)(tab2[j]-'0');
                          aide2 = aide2 + retenu;
                          if (aide1<aide2 )
                          {retenu = 1; resultat = (aide1+10) - aide2;}
                          else
                          {retenu = 0; resultat =  aide1 - aide2;}
                          tabResultat[compteur++]= resultat; 
                   }
                  
                   for(int j=TbUn-1; j>=0; j--)
                   {
                            if (tabResultat[j]!=0)
                            {
                            TenZero = false;
                            break;
                            }
                            else
                            {
                            TenZero = true;
                            }
                   }
           
                   for(int j=TbUn-1; j>=0; j--)
                   {oss << tabResultat[j];}           
           
           if (TenZero == false)
           {
                 resultatF.number = oss.str();
            }
           else
           {
                 resultatF.number = "0";
           }
           return(resultatF);   
    }
   
    BigInt calculerMulti(BigInt bUn,BigInt bDeux){
           BigInt tempAide("1");
           BigInt aideCdeB("0");
           int nombreUn,nombreDeux;
           istringstream issUn(bUn.number);
           istringstream issDeux(bDeux.number);
           issUn >> nombreUn;
           issDeux >> nombreDeux;
           //if(bUn.number=="0" || bDeux.number=="0"){return aideCdeB;}             
           if(nombreUn==0 || nombreDeux==0){return aideCdeB;}
           else{return (bDeux+calculerMulti(bUn-tempAide,bDeux));}
    }
   
    int getnumber(string t){
            return t.length();
    }
programme principale

#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <string>
#include "bigInt.h"

using namespace std;

int main()
{
    BigInt nbrUn;
    BigInt nbrDeux;
    BigInt n;
   
    cout << "Tapez SVP le premier nombre = ";
    cin >> nbrUn;
    cout <<"Tapez SVP le dexieme nombre = ";
    cin >> nbrDeux;
    cout << calculerMulti(nbrUn,nbrDeux)<<endl;
    system("PAUSE");system("PAUSE");system("PAUSE");system("PAUSE");
    return EXIT_SUCCESS;
}



Cette discussion est classée dans : int, number, s1, bigint, tbun


Répondre à ce message

Sujets en rapport avec ce message

menu en c/c++ avec un switch [ par sev622 ] bonjour, voilà, je voudrai faire un menu tout simple avec un switch dans un boucle while...mais j'y arrive pas. Voilà ce que j'ai fait : void main() Help, Petit pb d'IP [ par JCpp ] J'ai besoin de récupérer les 4 valeurs du IP entre chaque point en Int, pour pouvoir ensuite les incrémenter.On ma proposer une solution qui n'est pas simplifier prog. [ par F0ra ] Bonjour,Je cherche de l'aide pour simplifier mon programme au maximumVoici, le contenu du fichier txt :0 1 2 5 3 4 . 1 2 51 1 5 2 2 6 . 9 2 3 2 5 9 8 Un sous mot dans une chaine [ par souad213 ] Bonjour tout le monde,Voilà mon problème, j'ai deux chaine S1 et S2.je veux ecrire une fonction qui vérifier si S1 est une sous chaine de S2 sans util c++ : problème de tableau dynamique dans une classe [ par rollingsteen ] Hello, je dois développer une application permettant de travailler sur de très gros nombres (200 digits) -> les digits sont stockés dans un tableau. Class avec constructeur personnalisé dans une DLL: error LNK2001 [ par orc_undead ] Bonjour à vous cher internaute. J'utilise VC++ 2008 et je suis en train d'essayer de créer une DLL d'une simplicité inégalée. Seulement, un problème s héritage c++ [ par mouadsa ] Bonsoir, Alors, j'ai créer un programme en c++ concernant une classe "compte" où je px calculer le versement et le retrait bien sur sous condition. Ma ce code ne marche pas?????????? [ par banak3181 ] s'il vous plait les gars je veux que quelqu'un me disent pourquoi ce code ne marche sur dev C++:#include #include #include #include # include<myconio. Creer objet avec classe heritée [ par jonas03 ] Bonjour à tous,Voici mon problème : j'ai une classe personne et 2 classe dérivées interne et externe mais je veut créer dans mon main une personne mai base de donnée oracle 10g [ par sancha ] salut...jé crée 1 base de donnée sous oracle 10g et je sé ps est ce kilé correcte ou pas?vous pouvez médé?voici mon base de donnée:       create table


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales