c ++中的大整数

我知道这个问题可能已在本论坛多次和网络上提出过。 我被要求在c ++中创建一个大整数的实现,但是有一个约束,我的一个构造函数应该将一个int作为一个参数…所以我猜我会有多个非默认的构造函数..所以我的问题是,最简单的方法是什么?

那么,问题似乎是“如何将整数转换为位列表”? 换句话说,整数的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]。

C ++ BigInt类
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; } 

为什么重新发明轮子? 使用GNU MP库 。

[编辑]闻起来像家庭作业。 所以当你有一个BigBit类时,那么这样做:

  1. 清除所有位
  2. 编写一个循环,遍历构造函数的int参数上的所有位
  3. 对于int参数中的每个位,即!= 0 ,设置BigBit向量中的位。