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 intunsigned long long int 但仍然显示相同。

请帮我摆脱这个。

在 C++ 中,赋值左边的类型 (=) 不影响右边的类型。

       n = 2* nums[j];

这里的表达式是2* nums[j],由于2nums[j]都是int类型,结果还是int类型。 n 的类型不起作用。

将至少一个参数转换为 long long 以获得 long long 结果:

       n = 2LL* nums[j];

或者

       n = 2* (long long) nums[j];