乘法错误

ifmq2ha2  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(420)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

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

a = 1000000000 and b = 999999999

当我这么做的时候

System.out.print(a*b);

它返回1808348672。
我试过这样做:

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

它仍然返回1808348672

hfyxw5xn

hfyxw5xn1#

a 以及 bint s、 所以它们的乘法也将是一个 int ,在升级为 long 由显式演员。
你可以把它们定义为 long 或者把它们单独投给 long 在执行乘法之前。

j9per5c4

j9per5c42#

我试过这样做:

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);
    }
}
javac foo.java && java Foo
999999999000000000

你可能试过的是

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

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

相关问题