java - 在 Java 中求和两个巨大的长
问题描述
我编写了这个方法,它在 arrayList 中搜索是否有两个数字的总和等于变量elem。问题是变量的总和超过了long类型的维度。我该怎么写?
public static boolean searchSum(ArrayList<Long> array, long elem) {
int left = 0, right = array.size()-1;
while (left<right) {
long n1=Long.valueOf(array.get(left));
long n2=Long.valueOf(array.get(right));
if ((n1+n2)==elem) return true;
else if ((n1+n2)<elem) left++;
else right--;
}
return false;
}
解决方案
您可以使用java.math.BigInteger
. 它可以存储不可变的任意精度整数。
例如:
public BigInteger sum(Long number1, Long number2) {
BigInteger bigNumber1 = BigInteger.valueOf(number1);
BigInteger bigNumber2 = BigInteger.valueOf(number2);
BigInteger result = bigNumber1.add(bigNumber2);
return result;
}
在这种情况下,您可以像这样重写此方法:
public static boolean searchSum(ArrayList<Long> array, long elem) {
BigInteger bigElem = BigInteger.valueOf(elem);
int left = 0, right = array.size() - 1;
while (left < right) {
BigInteger n1 = BigInteger.valueOf(array.get(left));
BigInteger n2 = BigInteger.valueOf(array.get(right));
BigInteger sum = n1.add(n2);
if (sum.equals(bigElem)) {
return true;
} else if (sum.compareTo(bigElem) < 0) {
left++;
} else {
right--;
}
}
return false;
}
推荐阅读
- r - 在 R 中安装包 geogrid
- r - R - 将 Nan 转换为 NA
- angular - 如何知道组件是嵌入的还是从路由器调用的
- facebook-instant-articles - 即时文章中未显示应用安装 CTA
- docker - 使用客户端容器连接到主机上的 BACNET 服务器
- php - 如何为每个注册用户创建二维码?
- sql - 关于 SQL 透视查询
- javascript - 搜索功能在主详细信息应用程序的主页面中不起作用
- progressive-web-apps - 从服务器获取 Web 清单时添加到主屏幕横幅提示未出现,然后在 index.html 中设置该路径
- ios - 收到 URL https://developerservices2.apple.com/services/xxx 的非 HTTP 200 响应 (400)