首页 >后端开发 >C++ >如何在 C 中实现 BigInt 类来处理任意大整数?

如何在 C 中实现 BigInt 类来处理任意大整数?

Susan Sarandon
Susan Sarandon原创
2024-12-22 00:09:59596浏览

How to Implement a BigInt Class in C   for Handling Arbitrarily Large Integers?

在 C 中实现 BigInt 类

在 C 中,当处理大于 long int 的数字时,创建自定义“大整数”类。不要依赖外部实现,而是考虑创建自己的实现来更深入地理解这些概念。

数据结构

一种简单的方法是将数字存储为字符串,将其分解为更小的数字(例如数字),并将它们放入一个数组中。这简化了比较运算,但引起了对加法和乘法等运算的担忧。

算法概述

对于这些运算,考虑整数的二进制性质是有益的。以实现加法运算符 (=) 为例,迭代每个数字对,然后将它们相加。如果结果溢出 BaseType,则将超出的部分转入下一位。

代码示例

template< class BaseType >
BigInt< BaseType >&amp; BigInt< BaseType >::operator += (BigInt< BaseType > const&amp; operand)
{
  BT count, carry = 0;
  for (count = 0; count < std::max(value_.size(), operand.value_.size(); count++)
  {
    BT op0 = count < value_.size() ? value_.at(count) : 0, 
       op1 = count < operand.value_.size() ? operand.value_.at(count) : 0;
    BT digits_result = op0 + op1 + carry;
    if (digits_result-carry < std::max(op0, op1)
    {
      BT carry_old = carry;
      carry = digits_result;
      digits_result = (op0 + op1 + carry) >> sizeof(BT)*8; // NOTE [1]
    }
    else carry = 0;
  }
 
  return *this;
}

实现说明

  • BaseType 是 BigInt 的基础类型,例如 int或长。
  • value_ 向量存储数字的各个数字。
  • 进位跟踪数字之间的任何溢出。
  • 通过将结果与原始结果进行比较来完成溢出检测数字。

其他运算符

重复这种减法、乘法和除法的算法方法。实施标准运算符,如

结论

构建自定义 BigInt 类是一项具有挑战性但有益的练习。遵循此处概述的步骤可以帮助您实现一个功能强大且高效的类,用于处理 C 中的任意大整数。

以上是如何在 C 中实现 BigInt 类来处理任意大整数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn