c++ - 如何应对 int 溢出

标签 c++ casting int overflow long-integer

我有这段代码,我正在努力避免 int 类型的溢出。当我输入 {1000000,1000000} 我得到的是0而不是1,这是int类型溢出造成的。我正在尝试以某种方式转换它,但它不起作用,请帮忙。

最好的问候!

#include <vector>
#include <string>
#include <algorithm>
#include <iostream>

using namespace std;

class SplitIntoPairs {
public:
    int makepairs(vector<int> A, int X)
    {

        int s = 0;
        sort(A.begin(), A.end());

        for (int i = 0; i < A.size() - 1; i += 2) {
            int k = A[i] * A[i + 1]; //bool b = true;
            if (A[i] * A[i + 1] > 2147483647) {
                k = (long long)(k);
                //  b=false;
            }
            if (k >= X)
                ++s;
        }
        //return the created int
        return s;
    }
};

最佳答案

A[i] * A[i + 1] 正在执行整数运算,因此它会溢出 A 中的大值,与 2147483647 进行比较在 Actor 无法正常工作之前。

如果在执行乘法之前将 A 中的值转换为 long,则甚至不需要比较。例如:

long long k = (long long)(A[i]) * (long long)(A[i + 1]);
if (k >= X)
    ++s;

关于c++ - 如何应对 int 溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20954853/

相关文章:

c++ - 数据结构成员的成员初始化

c++ - 如何确定要 dynamic_cast 到哪种类型?

c++ - 在派生类中使用基类 typedef

c# 转换为从类型名获取的类型作为字符串

java - 纠正和改进java代码

java - 检查整数数组以查看任意两个元素的总和是否等于另一个元素

python - "Int"对象不可迭代

C++ 多维数组问题 - 条目打印不止一次

Java 使用 Class 转换对象

c++ - const_cast 安全吗?