ADT整数类问题
ADT Integer class questions
我对编程很陌生,我必须为整数做一个抽象数据类型(ADT)。
我已经浏览了一些提示,例子,教程,但我找不到任何有用的,所以我希望我能在这里得到一些答案。我想了很多关于如何格式化存储我的整数的ADT我在想这样的东西:
int lenght; // stores the length of the number(an limit since this numbers goes to infinite)
int[] digits; // stores the digits of my number, with the dimension equal to length
现在,我对如何处理符号表示感到困惑。是否可以将符号保持为char something
: char sign
?
但是接下来的问题是,当我必须对两个整数进行相加和相乘时该怎么办,当我在这些操作中出现溢出时该怎么办。
所以,如果你们中的一些人对我应该如何表示数字(格式)以及我应该如何进行乘法和加法有一些想法,我将非常感谢。我不需要任何代码,我在学习阶段只需要一些想法。谢谢你。
这样做的一个好方法是将符号存储为bool(例如bool is_neg;
)。这样,数据的含义就完全清楚了(反之,如果是char,则不完全清楚)。
你可能想要将每个数字存储在一个unsigned short(或者如果你想要精确的符号,uint16_t)。然后,当你做两个数字的乘法时,你可以把它们乘以unsigned int (uint32_t),然后低16位是你的结果,溢出是在高16位。然后可以很容易地将其添加到结果数组中。你知道一个n位数字乘以一个k位数字最多是n + k位长,所以你可以预先分配你的数组为这个大小,然后担心以后删除多余的零。
希望这对你有帮助,如果你想要更多的技巧,请告诉我。
您必须做出的第一个设计决策是基础的选择。
你似乎倾向于十进制。可以解包(每个数字一个完整字节,数字或ASCII表示),也可以打包数字对(十进制编码二进制,一个字节中有两个4位)。
对于更快的操作,其他方案更方便:基是2的幂或10的幂,适合一个字节,一个short,一个int…
10的幂的好处是可以逐字地进行以10为基数的转换。
加法是一件简单的事情:将单词成对地相加并处理进位。
如果你关心效率,乘法是完全不同的故事。可以使用学校教的书面计算方法,但它需要长度1 ×长度2的运算。对于长数字,更有效的方法是首选(http://en.wikipedia.org/wiki/Multiplication_algorithm#Karatsuba_multiplication)。它们也更复杂。
- 添加存储在向量中的大整数的函数出现问题
- C++,遇到将双精度转换为整数的问题
- 类型转换问题:返回为整数而不是浮点/类型
- 调用 Parse int 函数时编译 parse 整数程序时出现问题
- 将大小转换为整数有什么问题?
- C++程序,将整数输入转换为字符的问题
- 通过套接字发送整数数组时出现问题
- ceil、floor 和 round 在转换为整数时会遇到精度损失问题吗?
- 我的C++程序有问题.涉及动态调整整数数组的大小
- C++中嵌套在另一个 LinkedList 中的 LinkedList 整数上的回调函数问题
- 这种动态调整数组大小的尝试的输出有什么问题
- 将 10 个整数存储到数组C++中时出现问题
- 确定输入是否为整数C++时出现问题
- 整数转换问题
- 使用 libtiff 在 C++ 中写入映像时出现问题,在 TIFFScanlineSize 中出现整数溢出
- 在使用 C++ 整数和数学时遇到问题
- 字符串文字和整数常数的问题
- 类型转换问题:字符数组的元素转换为整数变量
- 整数到字符串的转换问题
- 优化问题:整数加倍