Runtime error: signed integer overflow: 2 * 2147483647 cannot be represented in type 'int'
Runtime error: signed integer overflow: 2 * 2147483647 cannot be represented in type '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];
我正在尝试 运行 以下代码:
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];