标签:处理 weixin return 负数 吐槽 sdn 如何 target lang
hack数据 10,INT32_MIN
原因:没有处理-INT32_MIN未定义的情况,大多数情况下-INT32_MIN = -INT32_MIN,直接死循环
hack数据 INT32_MIN,10
原因:条件不对
1.a * b == INT_MIN 当a取INT32_MIN,很容易出问题,正确的姿势是用除法来判断乘法溢出
2.INT32_MIN / a 当a = -1的时候,直接乘法溢出....很多代码都没有考虑到这个情况....
3.一般情况-INT32_MIN = INT32_MIN,很多人在化负数为整数的时候,没有考虑到这一点....
网上一堆代码抄来抄去....错误的很多...吐了
两层for暴力枚举check即可,数据很强
using ll = long long int;
vector<ll> v = {10,10,INT64_MAX,INT64_MIN,0,INT32_MAX,INT32_MIN,100,-100,INT32_MAX / 2,INT32_MIN / 2,INT64_MAX / 2,INT64_MIN / 2,3,-3,-INT64_MAX,-1,1,2,-2,-3,-10,1ll * INT32_MAX * (INT32_MAX - 10),1ll * INT32_MAX * INT32_MAX * 1ll,1ll * INT32_MIN * INT32_MAX,123456789101112ll,-1234567891234578ll-1234568,12345645,123544515555ll,1ll * INT32_MIN / INT32_MAX,1ll * INT32_MAX * 123454,1ll * INT32_MIN * 1231121,12313,INT32_MIN / 8 * 1ll - 100,1ll * INT32_MIN * 8 * 1ll + 1};
using ll = long long int;
ll is_mul_overflow(ll a,ll b)
{
if (a == -1)
return (b == INT64_MIN);
if (b == -1)
return (a == INT64_MIN);
if (a >= 0 and b >= 0)
return a == 0 ? 0 : INT64_MAX / a < b;
if(a < 0 and b < 0)
return INT64_MAX / a > b;
if (b < 0)
return INT64_MIN / b < a;
else
return INT64_MIN / a < b;
}
标签:处理 weixin return 负数 吐槽 sdn 如何 target lang
原文地址:https://www.cnblogs.com/XDU-mzb/p/14833501.html