在我的C++代码中有:
int c=(a+b)/2;
我确信最终的结果不会导致整数溢出,但这是不能保证的(a+b)
以下是我的错误信息:
第20行: Char 27:运行时错误:有符号整数溢出: 1063376696 + 2126753390不能用'int‘(solution.cpp)类型表示
怎样才能解决这类问题?
发布于 2021-02-22 23:44:30
您可以使用64位ints进行操作,然后将其转换为32位。
int c = int((std::int64_t(a) + std::int64_t(b)) / 2);
发布于 2021-02-23 04:10:41
性病:中点(a,b);
static_cast(b))/2); ((static_cast(A)+static_cast))
-ftrapv
)或内置标记(例如__builtin_add_overflow
)检测它:如果(a,b,&__builtin_add_overflow)抛出std::out_of_range("overflow");
使用U=无符号int;返回a>b?a-(static_cast(a)-b)/2:
发布于 2021-12-05 10:42:25
只需使用int c=a+(B)/2;如果a和b都为正。否则,您可以使用上述方法。
https://stackoverflow.com/questions/66325015
复制相似问题