如何应对 int 溢出
How to cope with int overflow
我有这段代码,我试图避免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转换之前的比较无法正常工作。
如果在执行乘法之前将值转换为 A
到 long,则甚至不需要比较。例如:
long long k = (long long)(A[i]) * (long long)(A[i + 1]);
if (k >= X)
++s;
您选择了正确的方向 - 以 64 位整数存储产品,但您必须考虑将 32 位整数相乘,您会收到 32 位整数。您所需要的只是在乘法前将 32 位整数转换为 64 位整数
int makepairs(std::vector<int> A, int X)
{
int s = 0;
sort(A.begin(), A.end());
for (int i = 0; i < A.size() - 1; i += 2) {
long long k = ((long long) A[i]) * A[i + 1];
if (k >= X)
++s;
}
//return the created int
return s;
}
相关文章:
- 'short int'持有的值溢出,但"自动"不会溢出?
- 我的 int main() 中出现堆栈溢出错误
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 为什么 cin.get(char, int) 不会溢出?
- 创建具有未定义溢出的无符号 int
- 将 Vector<int> 推送到 Vector<vector 时出现堆溢出错误<int>>
- C++长 int 溢出/下溢
- 3 * 1000000000 溢出为 int,但变量很长.为什么
- 以下程序中最大 int 1000 000(在 int 范围内)的整数溢出
- 如何应对 int 溢出
- 提升精神不检查 int 溢出
- 将long-long与int进行比较时为什么会溢出
- 在涉及溢出错误的情况下,从int转换为char
- 无符号Int.溢出
- 从istream中读取int,检测溢出
- 检查c++中的int溢出
- 在溢出的情况下,i++是否对小于int的有符号类型调用未定义的行为?
- 每次我通过ifstream读取一个特定的输入时,输入就会改变,可能是int溢出
- 在objective-c中将c字符串解析为int以避免溢出
- 使用长int来避免溢出是一种好的做法吗