我正在编写自己的bignum类以进行大量运算。到目前为止,我已经重载了operator=
和operator+
。我如何进行长除法?
另外,现在我只能将整数范围内的值分配给bignum对象。如何分配超出int范围的值?不用字符串就能做到吗?
#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();
}
最佳答案
为了分配大数字,通常的方法是字符串。这通常仅发生在您的计算接口(interface)上,因此不是问题。另一种方法是让模板构造器接受一系列字符,您将这些字符解释为Two's Compliment数字(我更喜欢这种方法,但是我没有看到它经常使用)。
如果您真的想实现BigNum类,那么我建议您阅读有关Expression Templates的一种方法,该方法可以减少看起来自然的代码中的临时成本。
关于c++ - C++中的Bignum除法和值赋值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6307352/