java - 不正确的乘法
问题描述
我正在尝试解决这个涉及基本数学的特殊问题。我的算法适用于所有其他测试用例,因此我知道它是正确的。但是对于其中一个测试用例中的一个特定输入,结果是错误的。我通过打印它们来检查值,值是:
a = 1000000000 and b = 999999999
当我做
System.out.print(a*b);
它返回 1808348672。
我试过这样做:
long ans = (long)a*b;
System.out.print(ans);
它仍然返回 1808348672
解决方案
我试过这样做:
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
. 这不起作用,因为整数乘法在您的演员发生之前溢出。
推荐阅读
- amazon-web-services - RDS ScalingConfiguration 参数引发错误
- laravel - Laravel 错误:调用未定义的方法 Illuminate\Support\Facades\Cache::rememberForever()
- c# - 将 WebBrowser 添加到 windows 窗体后 form1.show() 不起作用
- powershell - 无法通过 ps1 脚本删除 PowerShell 别名
- ios - 将应用分发到 App Store Connect 上传失败,info.plist 中出现无效的 NSExtention 密钥错误
- flutter - Flutter:删除根据请求发送的肥皂信封
- haskell - 无法在 Spock 和 Lucid 中创建的应用程序中显示 IO [[String]]
- python - 节中的预定义搜索条件?
- java - 通过命令连接的 ProxySQL ssl 有效,但通过 Java 客户端无效
- kotlin - kotlin 中的统一委托属性