Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中针对Python的同一函数的不同输出_Java_Python - Fatal编程技术网

Java中针对Python的同一函数的不同输出

Java中针对Python的同一函数的不同输出,java,python,Java,Python,我有一个计算公式 ((x+y-1)*(x+y-2))/2 + x 并获取它的字符串表示形式。 因此,我在Java1.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(

我有一个计算公式

((x+y-1)*(x+y-2))/2 + x 
并获取它的字符串表示形式。 因此,我在Java1.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);
}
在Python2.7中

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

print(answer(99999,99999))

Java给了我
672047173
的输出,而Python给了我
19999400005
,并且Python的值似乎是正确的。这种差异背后的原因是什么

19999400005
对于
int
变量的值太大,因此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);
}
输出为:

19999400005
还请注意,您可以直接打印
答案
,而不必显式地将其转换为
字符串

System.out.println(answer);

因为java中的整数范围最小值为-2147483648,最大值为2147483647

int-answer=((x+y-1)*(x+y-2))/2+x

在这一行中,您将为整数指定更高的范围值。它会导致算术运算出现整数溢出。这就是为什么要得到正确的值,必须使用Long数据类型

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

在这种情况下,Java计算肯定会溢出。这仍然不起作用
int*int
int
中给出结果,然后将其分配给
long
,这样您仍然可以得到受
整数溢出影响的答案。如果您想对
整数执行相同的操作
您可以按
1L*(x+y-1)*(x+y-2)
执行
long
中的
乘法操作。您在这里错了。乘法运算后将执行隐式转换,乘法将以整数数据类型执行,这将导致溢出并给出错误答案。您可以通过运行代码段进行检查。