在我的问题之前,我要说,我知道在Python 3周围,“无限长”被集成到int中,因此Python中的int可以有效地与RAM一样大。
我正在比较Java和Python。
下面是一个Python和Java程序。他们做同样的事情。
蟒蛇:
def answer(n):
count = 0
t = int(n)
while (t!=1):
t = t+1 if (t%2==1) else t/2
count += 1
return count
Java:
static int answer(String n){
int count = 0;
BigInteger t = new BigInteger(n)
while(!t.equals(BigInteger.ONE)){
t = ((t.remainder(new BigInteger("2"))).equals(BigInteger.ONE))
?t.add(new BigInteger("1"))
:t.divide(new BigInteger("2"));
count++;
}
return count;
}
然后,我编写了一个简单的bash脚本来运行java和python(版本为2.7.12和3.5.2),并比较了它们的输出。
#!/bin/bash
i=$1
a=`java Solution $i`
b=`python Solution.py $i`
c=`python3 Solution.py $1`
echo "INPUT: $1"
echo ""
echo "LANGUAGE: VERSION: RESULT:"
echo "-------- --------- ------"
echo "Java 1.8.0_151 $a"
echo "Python 2.7.12 $b"
echo "Python3 3.5.2 $c"
下面是一些运行示例。结果列是最重要的。
INPUT: 123
LANGUAGE: VERSION: RESULT:
-------- --------- ------
Java 1.8.0_151 9
Python 2.7.12 9
Python3 3.5.2 9
INPUT: 123456789
LANGUAGE: VERSION: RESULT:
-------- --------- ------
Java 1.8.0_151 39
Python 2.7.12 39
Python3 3.5.2 39
INPUT: 12345678998765
LANGUAGE: VERSION: RESULT:
-------- --------- ------
Java 1.8.0_151 61
Python 2.7.12 61
Python3 3.5.2 61
INPUT: 123456789987654321
LANGUAGE: VERSION: RESULT:
-------- --------- ------
Java 1.8.0_151 84
Python 2.7.12 84
Python3 3.5.2 82
因此,它们几乎都会产生相同的结果,直到输入足够大,然后你可以看到最后一个结果是不同的。几乎每一个比这个大的数字都会产生不同的结果。
Python3的int和Java的BigInteger不应该得到相同的结果吗?
Python v.2不应该得到不同的结果吗?
哪一个是错误的,为什么?Java和Python3还是Python v.2.7.12?
如何纠正错误以获得正确的输出?