【发布时间】:2016-03-06 18:44:35
【问题描述】:
我有这个任务,我需要找到 2 个整数的平均值。 这是我的代码:
public class AverageNumber {
public int average(int a, int b) {
if (a == Integer.MIN_VALUE && b == Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
} else if (a < 0 || b < 0) {
return (a + b)/2;
}
return (a+b)>>>1;
}
}`
我在这次测试中失败了:
Input: -2147483648, -2
Expected: -1073741825
Actual: "1073741823"
我需要一些帮助来处理超出范围 = Integer.MIN_VALUE 的数字。而且我不能使用长类型。
【问题讨论】:
-
当您的数据(以及依赖于它的计算)无法放入提供给您的存储空间(这里就是这种情况)时,您需要编写或使用(许多免费提供的)“大数字”图书馆。鉴于您对我不能使用长类型 的陈述,我希望您在一个班级中,您应该为此形成自己的有限大数函数。堆栈溢出不会为您编写代码,但如果您尝试编写自己的代码并遇到麻烦,您可能会在发布自己为解决问题所采取的代码和努力后获得帮助。
-
这是作业吗?你只能使用
ints 进行计算? -
实际上,鉴于您在此处尝试执行的操作范围有限,因此不需要复杂的库。虽然我们认为执行平均的正常方法是将两个值相加并将结果除以 2,但这是行不通的,因为您无法安全地将两个输入相加。在不透露太多内容的情况下,您可以重写公式,这样您就不必添加两个会溢出 int 的值。