针对Python的Java中的相同功能不同

Ish*_*med 3 python java

我有一个公式来评估

((x+y-1)*(x+y-2))/2 + x 
Run Code Online (Sandbox Code Playgroud)

并获取它的字符串表示形式.所以在Java 1.7中我写了

public static void main(String[] args)
{
    int x = 99999;
    int y = 99999;
    int answer = ((x+y-1)*(x+y-2))/2 + x;
    String s = Integer.toString(answer);
    System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

并在Python 2.7中

def answer(x, y):
  z = ((x+y-1)*(x+y-2))/2 + x
  return str(z);

print(answer(99999,99999))
Run Code Online (Sandbox Code Playgroud)

Java给了我一些输出,672047173而Python给了我19999400005看似Python的价值是正确的.这种差异背后的原因是什么?

Era*_*ran 6

19999400005int变量的值太大,因此Java计算会溢出.

long改为使用变量:

public static void main(String[] args)
{
    long x = 99999;
    long y = 99999;
    long answer = ((x+y-1)*(x+y-2))/2 + x;
    String s = Long.toString(answer);
    System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

19999400005
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以answer直接打印,而不必将其String明确转换为:

System.out.println(answer);
Run Code Online (Sandbox Code Playgroud)