J'écris ma propre classe bignum pour fonctionner sur de grands nombres. Jusqu'à présent, j'ai surchargé les operator=
et operator+
. Comment puis-je effectuer une longue division?Divison Bignum et affectation de valeur en C++
De plus, je ne peux maintenant affecter que des valeurs dans la plage des entiers à l'objet bignum. Comment attribuer des valeurs qui ne sont pas comprises dans la plage int? Est-il possible de le faire sans cordes?
#include <iostream>
using namespace std;
class bignum
{
public:
int number[20];
bignum operator + (bignum);
bignum operator = (int);
void output()
};
bignum bignum::operator= (int j)
{
int f;
f=j;
for(int k=0; k<=19; k++)
{
number[k]=0;
}
for(int l=19; l>=0,f>0; l--)
{
number[l]=(f%10);
f/=10;
}
}
bignum bignum::operator+ (bignum b)
{
bignum a;
int carry=0;
for(int k=0; k<=19; k++)
{
a.number[k]=0;
}
for(int i=19; i>=0; i--)
{
a.number[i]= number[i]+b.number[i]+a.number[i];
if(a.number[i]>9)
{
carry=(a.number[i]/10);
a.number[i-1]+=carry;
a.number[i]=(a.number[i]%10);
}
}
return a;
}
int main()
{
bignum a,b,c;
a=9999;
b=a+a;
//for(int k=1; k<=9; k++)
//b.number[k]=0;
//b=a+a;
for(int k=0; k<=19; k++)
cout<<b.number[k];
cin.get();
}
Si vous avez besoin de travailler avec de très grands nombres, alors les algorithmes d'aproximation sont la solution. Il est également préférable d'utiliser des chaînes hexadécimales plutôt que des décimales pour l'assignation (beaucoup moins de CPU mangeant pour encoder les hexs de décodage si vos bignums utilisent une forme binaire de représentation) – Spektre