我有一个公式来评估
((x+y-1)*(x+y-2))/2 + x
并获取它的字符串表示形式.
所以在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);
}
并在Python 2.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计算会溢出.
使用长变量:
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);
标签:python,java
来源: https://codeday.me/bug/20190722/1501302.html