char * adtemp = new char [NCHIFMAX] ;
int i = 0 ;
while (n)
{ adtemp [i++] = n % 10 ;
n /= 10 ;
}
// ici i contient le nombre exact de chiffres
nchif = i ;
adchif = new char [nchif] ;
for (i=0 ; i adchif [i] = adtemp [i] ;
// on libère l'emplacement temporaire
delete adtemp ;
}
big_int::big_int (big_int & n)
{ nchif = n.nchif ;
adchif = new char [nchif] ;
int i ;
for (i=0 ; i adchif [i] = n.adchif [i] ;
}
big_int & big_int::operator = (const big_int & n)
{ if (this != &n)
{ delete adchif ;
nchif = n.nchif ;
adchif = new char [nchif] ;
int i ;
for (i=0 ; i adchif [i] = n.adchif [i] ;
}
return * this ;
}
big_int operator + (const big_int & n, const big_int & p) // voir remarque
{ int nchifmax = (n.nchif > p.nchif) ? n.nchif : p.nchif ;
int ncar = nchifmax + 1 ;
// préparation du résultat dans zone temporaire de taille ncar
char * adtemp = new char [ncar] ;
int i, s, chif1, chif2 ;
int ret = 0 ;
for (i=0 ; i { chif1 = (i chif2 = (i s = chif1 + chif2 + ret ;
if (s>=10) { s -= 10 ;
ret = 1 ;
}
else ret = 0 ;
adtemp [i] = s ;
}
if (ret == 1) adtemp [ncar-1] = 1 ;
else ncar-- ;
// construction d'un objet de type big_int où l'on recopie le résultat
big_int res (ncar, 0) ; // second argument fictif
res.nchif = ncar ;
for (i=0 ; i res.adchif [i] = adtemp [i] ;
delete adtemp ;
return res ;
}
ostream & operator << (ostream & sortie, big_int & n)
{ int i ;
for (i=n.nchif-1 ; i>=0 ; i--) // attention à l'ordre !
sortie << (int)n.adchif [i] ;
363
Précédent

- 364/398

Suivant