J'ai commencé à écrire une bibliothèque bignum, avec un vecteur de shorts pour représenter la valeur, une fonction d'impression et un support de nombre négatif. Cependant, je ne peux pas trouver un bon moyen de mettre en œuvre plus long, comme celui-ci:Comment implémenter complètement l'addition/multiplication de bignum en C++
123
+123
----
246
Le dernier code je ne donne pas une erreur de segmentation est la suivante:
void add(unsigned long long b)
{
for(long long i=v.size()-1;i>=0;--i)
{
if((b+v[i])<10)
v[i]+=b;
else // Carry
{
if(i==0) // 1st digit
{
v.push_front(1); // Can't be more than 1
}
else
v[i-1]++; // Increment digit to the left
}
}
}
, mais plus d'un carry est pas correct (10 + 1 est 21)
EDIT: Il est mis en œuvre en tant que classe
L'addition est simple. Vous ajoutez des chiffres, et si la somme est plus grande qu'un seul chiffre peut contenir, avoir un report pour l'endroit suivant. –
À moins que vous ne souhaitiez vraiment les chiffres de base-10, les bibliothèques bignum utilisent généralement la base-B, où B = 2 ** w' et 'w' est le nombre de bits du type entier (non signé). –
"* ça ne fait rien *" Quand 'v.size()' est '1', quel travail voyez-vous cette fonction? –