c++ - 运行时错误:有符号整数溢出:2 * 2147483647 不能用“int”类型表示
问题描述
我正在尝试运行以下代码:
int across(vector<int> &nums, int l , int m, int h){
int i = l, j = m +1;
int count = 0;
unsigned long long int n;
unsigned long long int prev;
while(i <= m && j <=h){
n = 2* nums[j];
prev = nums[i];
if(prev > n){
count += m - i +1;
j++;
}
else{
i++;
}
}
return count;
}
nums 是从索引 l 到 m 以及从索引 m+1 到 h 排序的向量。我必须计算对数(i,j)这样nums[i] > 2 * nums[j]
当元素之一是 2147483647 时,我收到运行时错误。
我尝试使用long long int
,unsigned long long int
但仍然显示相同。
请帮我摆脱这个。
解决方案
在 C++ 中,赋值 ( ) 左侧的=
类型不会影响右侧的类型。
n = 2* nums[j];
这里的表达式是2* nums[j]
,因为2
和nums[j]
都是类型int
,所以结果仍然是类型int
。类型n
不起作用。
转换至少一个参数以long long
获得long long
结果:
n = 2LL* nums[j];
或者
n = 2* (long long) nums[j];
推荐阅读
- reactjs - React-router history.push 实际上并没有重定向
- php - 在 laravel 中返回多对多关系结果,如果不存在则返回 null
- node.js - npm 错误!执行 npm install 时的代码 1
- python - 如何解决这个 chrome webdriver 错误?
- python - 如何在pyspark中为以下情况使用if条件?
- websocket - Nest js从websockets微服务中的rabbitmq读取事件
- php - 为 PHP 升级 gRPC 的最佳方法是什么?
- python - AttributeError:模块“llvmlite.binding.ffi”没有属性“register_lock_callback”
- mongodb - Mongoose/ MongoDB:获取原始数组元素的时间戳
- python - 从 varchar 列中提取由“-”分隔的最后一个数字