1

我尝试在Python2.7上编写一些代码,这将能够使用线性列表实现 bignum 算法。我知道,这在 Python 中没用,但这是我在拼贴中的功课。我写了一些工作代码,但问题在于划分. 我确信该功能有效,但是当我运行代码对其进行测试时,我得到了错误的答案(在某些情况下)。但是,如果我一步一步地执行代码,它就可以正常工作。

我正在使用 linux,但我在朋友的 windows 计算机上测试了我的代码,我遇到了同样的问题。如果重要的话,我用 PyDev 在 Eclipse 中编写了代码。

我在 Ideone 上的代码:代码

如果控制台输出中的行相同 - 输出是正确的。在 Ideone 上输出也不正确。但是如果你在第 383 行下一个断点,然后进入_simple_div方法,答案将是正确的

希望大家帮我找出原因。
PS对不起丑陋的代码。

4

1 回答 1

0

如果我运行你的代码,我会得到

~/coding:$ python divbug2.py 
1-1
10

-1看起来不对。-1在分区的某个地方插入了一个被插入的东西吗?首先要尝试的是-1在该函数中搜索,这给出了

        i-=1
        res._addFirst(i)
        if i==-1: i=0

.. 这看起来很奇怪,因为如果i == -1, 那么你刚刚将它添加到res. 也许我们应该先检查一下,即

        i-=1
        if i==-1: i=0
        res._addFirst(i)

交换这两行会产生

~/coding:$ python divbug2.py 
10
10

然后 - 在编写了一个真正的.copy()方法之后,因为copy.deepcopy真的很慢,甚至使用 PyPy 我也厌倦了等待事情完成:

>>>> all(int(str(LongNum(x)._simple_div(LongNum(y)))) == x/y for x in range(2000) for y in range(1, 2000))
True

当你一步一步地做这件事时,我不确定为什么这对你有用,但我有点惊讶它完全有效。

于 2012-10-15T00:15:16.763 回答