K12教育赛事综合服务平台
聚乐之家官方网站
下载聚乐之家官方App
专注青少年竞赛题库网站
提示:int为32位有符号整数,溢出属于C++未定义行为,因此不能直接计算a + b后判断结果是否超出范围。
if (a + b > INT_MAX || a + b < INT_MIN) return true;
if (a > 0 && b > 0 && a > INT_MAX - b) return true; if (a < 0 && b < 0 && a < INT_MIN - b) return true; 其余场景返回false
if (a > 0 && b > 0 && a > INT_MAX - b) return true;
if (a < 0 && b < 0 && a < INT_MIN - b) return true;
if (abs(a) > INT_MAX / 2 || abs(b) > INT_MAX / 2) return true;
只要a和b同号就一定会溢出,直接返回true