-1

サーバーから telnet を使用して 'x * y' のような文字列を取得します。x と y はどちらも自然数です。必要なのは、正しい答えをサーバーに送り返すことだけです。桁数が 22 未満の場合、以下のコードから得られる答えは正しいですが、それ以上の場合は、何か問題が発生します。コードは次のとおりです。

import telnetlib

tn = telnetlib.Telnet(host, port)
while 1:
    eq = tn.read_some().decode("utf-8")
    eq = eq[:-2]
    params = eq.split()
    if (eq != ""):
    try:
        x=int(params[0])
        y=int(params[2])
        res = x*y
        tn.write(str(res).encode('latin-1'))
    except:
        print(eq)
        break

たとえば、

x=5892389056261064794905 #, 
y=7028717678246449032337 #then 
res=41415939126848056288120885900543594617842985 

そしてそれは正しいです。しかし、もし

x=10834381661191220895731, 
y=1501035997383808848779 #, 

aswer は正しくありません。主な問題は、Python シェルでの単純な式です。

10834381661191220895731 * 10834381661191220895731

正しい答えを与える

4

1 に答える 1

1

read_some を使用していて、最後の 2 バイトを削除するだけで cr-lf をチェックしていないため、バッファ サイズに達していると思われます。試す

eq = ''
while not eq.endswith('\n'):
    eq += tn.read_some().decode('utf-8')
eq.strip('\n')
于 2013-10-12T11:58:09.483 に答える