我知道这个问题可能已在本论坛多次和网络上提出过。我被要求在c ++中创建一个大整数的实现,但是有一个约束,我的一个构造函数应该将一个int作为参数...所以我猜测将有多个非默认构造函数..所以我的问题是,最简单的方法是什么?
答案 0 :(得分:1)
然后,问题似乎是“如何将整数转换为位列表”?换句话说,整数的base-2表示是什么?
因为这应该是家庭作业,让我通过思考基础10来讨论这个问题;一些想法应该是明显的适当变化。
给定一个基数为10的数字,很容易弄清楚最右边的数字是什么:它只是除以10时的余数。如果n = 1234,那么它最右边的数字是n%10 = 4.为了获得下一个最右边的数字,我们除以10(得到123),并重复该过程。所以:
1234/10=123; 1234%10 = 4
123/10=12 ; 123%10 = 3
12/10=1 ; 12%10 = 2
1/10=0 ; 1%10 = 1
所以现在我们得到了答案[4,3,2,1]。如果我们反转它们,我们的数字的基数为10:[1,2,3,4]。
答案 1 :(得分:0)
为什么重新发明轮子?使用GNU MP library。
[编辑]闻起来像家庭作业。所以当你有BigBit
课程时,请执行以下操作:
int
参数上的所有位int
参数中!= 0
的每个位,请设置BigBit
向量中的位。答案 2 :(得分:0)
C++ BigInt class
C++ Big Integer Library
写一个大的int例如:
typedef struct {
int high, low;
} BiggerInt;
BiggerInt add( const BiggerInt *lhs, const BiggerInt *rhs ) {
BiggerInt ret;
/* Ideally, you'd want a better way to check for overflow conditions */
if ( rhs->high < INT_MAX - lhs->high ) {
/* With a variable-length (a real) BigInt, you'd allocate some more room here */
}
ret.high = lhs->high + rhs->high;
if ( rhs->low < INT_MAX - lhs->low ) {
/* No overflow */
ret.low = lhs->low + rhs->low;
}
else {
/* Overflow */
ret.high += 1;
ret.low = lhs->low - ( INT_MAX - rhs->low ); /* Right? */
}
return ret;
}