我正在尝试解决这个涉及基本数学的特定问题。我的算法适用于所有其他测试用例,因此我知道它是正确的。但是对于其中一个测试用例中的一个特定输入,结果是错误的。我通过打印它们来检查值,值是:
a = 1000000000 and b = 999999999
Run Code Online (Sandbox Code Playgroud)
当我做
System.out.print(a*b);
Run Code Online (Sandbox Code Playgroud)
它返回 1808348672。
我试过这样做:
long ans = (long)a*b;
System.out.print(ans);
Run Code Online (Sandbox Code Playgroud)
它仍然返回 1808348672
我试过这样做:
Run Code Online (Sandbox Code Playgroud)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);
}
}
Run Code Online (Sandbox Code Playgroud)
long ans = (long)a*b;
System.out.print(ans);
Run Code Online (Sandbox Code Playgroud)
你可能尝试过的是
long ans = (long) (a*b);
Run Code Online (Sandbox Code Playgroud)
这将首先执行整数乘法,然后将结果转换为long。这不起作用,因为整数乘法在您的转换发生之前溢出。