划分两个非常大的数字,表示为无符号长long的链表

时间:2016-09-18 22:54:08

标签: c linked-list division largenumber

我在c中工作,正如标题中所说,我有一个struct,它是unsigned long longs的双重链接列表的节点,代表了非常大的数字。

我需要对它们实施基本算法并完成+-*但我还需要分裂。我已经看到了代表链接列表的大数字算术的答案,但我的问题有另一部分,溢出。

我目前正在尝试长时间划分,我的问题是,当第一个数字(unsigned long long)没有均匀分割时,剩下的部分会被带入两位数(两个unsigned long long s)数。我不知道如何在保持精度的同时将表示为两个ull s的大数除以ull。除法函数将仅在两个数字上被调用,其中第二个数字均匀地划分第一个。

不确定我需要提供哪些其他信息,但我被困在这里,任何直觉都会有所帮助,谢谢。

编辑:我为StackOverflow的明显新意而道歉,但对于那些好奇的我最终解决问题的方法是将数字视为二进制并逐位进行除法。这个解决方案消除了我遇到的问题。

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案可能是 - 考虑您已经拥有的内容 - 分两步完成所有部门。基本上,您的行为就好像长期无符号整数只是长无符号整数

这会使你必须完成的链条长度增加一倍,并且所需的操作数量增加四倍,但如果这不是一个问题,那么你可以将剩余的lu加上llu中的下一个lu进行划分。 ,这再次给你一个小于lu的余数。

换句话说,因为你需要比llu更大的东西但没有任何东西,你的整个工作用lu,然后 更大的东西可用于此操作 - llu < / em>的