Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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 错误乘法_Java_Math_Multiplication - Fatal编程技术网

Java 错误乘法

Java 错误乘法,java,math,multiplication,Java,Math,Multiplication,我试图解决一个涉及基础数学的特殊问题。我的算法适用于所有其他测试用例,因此我知道它是正确的。但是对于其中一个测试用例中的一个特定输入,结果是错误的。我通过打印来检查值,值为: a = 1000000000 and b = 999999999 当我这样做的时候 System.out.print(a*b); 它返回1808348672 我尝试过这样做: long ans = (long)a*b; System.out.print(ans); long ans = (long)a*b; Sys

我试图解决一个涉及基础数学的特殊问题。我的算法适用于所有其他测试用例,因此我知道它是正确的。但是对于其中一个测试用例中的一个特定输入,结果是错误的。我通过打印来检查值,值为:

a = 1000000000 and b = 999999999
当我这样做的时候

System.out.print(a*b); 
它返回1808348672

我尝试过这样做:

long ans = (long)a*b;
System.out.print(ans);
long ans = (long)a*b;
System.out.print(ans);

它仍然返回1808348672

a
b
int
s,因此它们的乘法也将是
int
,在通过显式强制转换提升为
long
之前溢出

您可以将它们定义为
long
s,或者在执行乘法之前将它们分别强制转换为
long
s

我尝试过这样做:

long ans = (long)a*b;
System.out.print(ans);
long ans = (long)a*b;
System.out.print(ans);
它仍然返回1808348672

不,它没有:

class Foo {
    public static void main(String[] args) {
        int a = 1000000000;
        int b = 999999999;
        long ans = (long)a*b;
        System.out.print(ans);
    }
}
javacfoo.java&&javafoo
999999999000000000
你可能尝试的是

long ans = (long) (a*b);

这将首先执行整数乘法,然后将结果强制转换为
long
。这不起作用,因为整数乘法在您的强制转换发生之前溢出。

这是一个糟糕的重复-它不能回答这个问题。真正的问题是这个问题是不可复制的,因为OP的代码是有效的。@Mureinik请别管它。这里的全部问题是没有相关的。这只是一个不可复制的问题。它通过单独铸造它们来工作。但是为什么我需要单独投下它们呢?我试图强制执行整个操作,但没有成功。@Jaidepkular强制执行结果太晚了-将两个
int
相乘将导致
int
,在您强制执行之前,该值已经溢出。如果您单独强制转换它们,您将乘以两个
long
s,这将产生一个
long
,可以容纳结果而不会溢出。我的坏消息。我在ans中使用了int-type,并试图将long存储在int变量中。@jaidepkular,如果没有另一个强制转换,它将无法编译。