【问题标题】:Runtime error: signed integer overflow: 2 * 2147483647 cannot be represented in type 'int'运行时错误:有符号整数溢出:2 * 2147483647 不能用“int”类型表示
【发布时间】:2020-07-27 10:25:58
【问题描述】:

我正在尝试运行以下代码:

 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] &gt; 2 * nums[j]

当元素之一是 2147483647 时,我收到运行时错误。

我尝试使用 long long intunsigned long long int 但仍然显示相同。

请帮我摆脱这个。

【问题讨论】:

    标签: c++ runtime-error runtime unsigned signed


    【解决方案1】:

    在 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];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多