I'm solving 27E — Number With The Given Amount Of Divisors. My code involved a function
mul(a, b) that will return 1018 + 7 if multiplying a and b will lead to overflow, and min(1018 + 7, a * b) otherwise. I checked for overflow using the condition
a*b div a != b.
When I submit my solution using C++14, it seemed that the overflow check failed, which lead to WA on test 5.
However, when I uncomment the if statement in the
mul function (which, theoretically don't print anything out), it get accepted.
I resubmitted the WA code with C++11 and C++17 Diagnostics, and it get accepted too.
I don't know what happened here. I suspected that some kind of optimization from compiler caused this strange behavior, but unfoturnately I know nothing about compiler optimization. Can anyone give me a proper explanation about this strange behavior? Thanks in advance.