首页 > 解决方案 > 不正确的乘法

问题描述

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

a = 1000000000 and b = 999999999

当我做

System.out.print(a*b); 

它返回 1808348672。

我试过这样做:

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

它仍然返回 1808348672

标签: javamathmultiplication

解决方案


我试过这样做:

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. 这不起作用,因为整数乘法在您的演员发生之前溢出。


推荐阅读