在数学问题上,我对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);
}
两者都能输出期望的答案。
如果我能知道原因那就太好了。非常感谢。
1条答案
按热度按时间vfwfrxfs1#
价值
n * m
正在从中溢出int
限制,因此你可以施展n
或者m
至long
为了把乘法的结果变成long
.输出:
重要的是你要知道
int
溢出时,它会从其最小限制重新开始,例如。输出: