1

線形リストを使用して、bignum 演算を実装できるPython2.7でいくつかのコードを記述しようとしています。これは 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)

これらの 2 つの行を入れ替えると、

~/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 に答える