5

非正数除算は、c++ と python プログラミング言語ではまったく異なります。

//c++:
11 / 3 = 3
11 % 3 = 2
(-11) / 3 = -3
(-11) % 3 = -2
11 / (-3) = -3
11 % (-3) = 2
(-11) / (-3) = 3
(-11) % (-3) = -2

したがって、ご覧のとおり、c++ は商を最小化しています。ただし、python は次のように動作します。

#python
11 / 3 = 3
11 % 3 = 2
(-11) / 3 = -4
(-11) % 3 = 1
11 / (-3) = -4
11 % (-3) = -1
(-11) / (-3) = 3
(-11) % (-3) = -2

C++ 電卓プログラムのチェックに使用するため、C++ のように動作する独自の除算関数をコーディングすることはできません。Python は中置演算子をサポートしていません。簡単な方法で整数を分割しながら、python を c++ のように動作させることはできますか? たとえば、フラグを設定したり、そのようなことをしたりしますか?

4

3 に答える 3

3

Thomas K が言ったようmath.fmodに、モジュロに使用するか、本当に必要な場合は自分で定義できます。

def cmod(x, y):
    return abs(x) % abs(y) * (1 if x > 0 else -1)

そして、この関数は C スタイルの除算をエミュレートする必要があります。

def cdiv(x, y):
    return abs(x) / abs(y) * cmp(x, 0) * cmp(y, 0)

and演算子を使用する必要があると言いました。ビルトインの演算子をオーバーライドできないため、これは不可能です。ただし、独自の整数型と演算子を定義してand演算子をオーバーロードできます。/%__div____mod__

于 2011-05-21T21:37:09.510 に答える
2

Python 除算を C++ のように動作させるために設定できるフラグはありません。

独自の除算関数をコーディングすることはできないとアドバイスしましたが、気が変わったら次のようにすることができます。

def cpp_int_div(dividend, divisor):
    a, b = dividend, divisor
    sign = 1 if (a>0 and b>0) or (a<0 and b<0) else -1
    return (abs(a)/abs(b)) * sign

def cpp_int_mod(dividend, divisor): # or just use math.fmod  (from Thomas K)
    a, b = dividend, divisor
    sign = 1 if a>0 else -1
    return (abs(a)%abs(b)) * sign

これは、仕様に従って動作することを示しています。

print "11 / 3 = %d" % cpp_int_div(11,3)
print "11 %% 3 = %d" % cpp_int_mod(11,3)
print "(-11) / 3 = %d" % cpp_int_div(-11, 3)
print "(-11) %% 3 = %d" % cpp_int_mod(-11, 3)
print "11 / (-3) = %d" % cpp_int_div(11, -3)
print "11 %% (-3) = %d" % cpp_int_mod(11, -3)
print "(-11) / (-3) = %d" % cpp_int_div(-11, -3)
print "(-11) %% (-3) = %d" % cpp_int_mod(-11, -3)

これにより、次のことが得られます。

11 / 3 = 3
11 % 3 = 2
(-11) / 3 = -3
(-11) % 3 = -2
11 / (-3) = -3
11 % (-3) = 2
(-11) / (-3) = 3
(-11) % (-3) = -2
于 2011-05-21T21:48:34.987 に答える
0

また、標準ライブラリからdecimalモジュールをチェックアウトする必要があります。

Decimal は、「人々を念頭に置いて設計された浮動小数点モデルに基づいており、必然的に最も重要な指針となる原則を持っています。コンピューターは、人々が学校で学ぶ算術と同じように機能する算術演算を提供する必要があります。」– 10 進算術仕様からの抜粋。

それでも、の結果は

import decimal
decimal.divmod(-11, 3)
>>> (-4, 1)
于 2011-05-21T22:01:16.070 に答える