【发布时间】:2021-01-04 10:08:07
【问题描述】:
在数学问题方面,我不熟悉在 java 中处理非常大的整数。
这是我对将纸张切割成 1*1 正方形的解决方案的回答。
public static void main(String[] args) {
long result = solve(841251657, 841251657);
System.out.println(result);
}
static long solve(int n, int m) {
long r = n*m - 1;
return r;
}
输出为1810315984,与707704350405245648的预期输出相差甚远。
但是,以下两种方式:
将long 的数学计算替换为BigInteger,
static long solve(int n, int m) {
BigInteger r = BigInteger.valueOf(n).multiply(BigInteger.valueOf(m));
return r.longValue() - 1;
}
或者手动插入输入(不确定是不是真的原因),
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long m = in.nextLong();
long n = in.nextLong();
long cuts = m*n-1;
System.out.println(cuts);
}
都可以输出预期的答案。
如果我能知道原因就太好了。非常感谢。
【问题讨论】:
-
您的方法接受
ints 并乘以ints。int是带符号的 32 位数字。它溢出了。 -
将
static long solve(int n, int m)更改为static long solve(long n, long m)。 -
哦,我明白了。谢谢大家!