Dar*_*ght 3 c++ unsigned signed runtime-error runtime
我正在尝试运行以下代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
nums 是一个从索引 l 到 m 以及从索引 m+1 到 h 排序的向量。我必须计算对(i,j)的数量,这样nums[i] > 2 * nums[j]
当其中一个元素为 2147483647 时,我收到运行时错误。
我尝试使用long long intandunsigned long long int但仍然显示相同。
请帮我摆脱这个。
在 C++ 中,赋值 ( ) 左侧的类型=不会影响右侧的类型。
n = 2* nums[j];
Run Code Online (Sandbox Code Playgroud)
这里的表达式是2* nums[j],并且由于 和2都是nums[j]类型int,所以结果仍然是类型int。的类型n不起作用。
至少转换一个参数以long long获得long long结果:
n = 2LL* nums[j];
Run Code Online (Sandbox Code Playgroud)
或者
n = 2* (long long) nums[j];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5192 次 |
| 最近记录: |