在 C 中实现 BigInt 类
在 C 中,当处理大于 long int 的数字时,创建自定义“大整数”类。不要依赖外部实现,而是考虑创建自己的实现来更深入地理解这些概念。
数据结构
一种简单的方法是将数字存储为字符串,将其分解为更小的数字(例如数字),并将它们放入一个数组中。这简化了比较运算,但引起了对加法和乘法等运算的担忧。
算法概述
对于这些运算,考虑整数的二进制性质是有益的。以实现加法运算符 (=) 为例,迭代每个数字对,然后将它们相加。如果结果溢出 BaseType,则将超出的部分转入下一位。
代码示例
template< class BaseType > BigInt< BaseType >& BigInt< BaseType >::operator += (BigInt< BaseType > const& 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; }
实现说明
其他运算符
重复这种减法、乘法和除法的算法方法。实施标准运算符,如
结论
构建自定义 BigInt 类是一项具有挑战性但有益的练习。遵循此处概述的步骤可以帮助您实现一个功能强大且高效的类,用于处理 C 中的任意大整数。
以上是如何在 C 中实现 BigInt 类来处理任意大整数?的详细内容。更多信息请关注PHP中文网其他相关文章!