我在C++写了一个程序来寻找一个b=c的所有解,其中一个、b和c一起使用所有数字0-9恰好一次。该程序循环一个和b的值,并在一个、b和b0上每次运行一个数字计数例程来检查数字条件是否满足。
但是,当一个b溢出整数限制时,可能会生成虚假解决方案。我最终使用以下代码检查了这一点:
unsigned long b, c, c_test;
...
c_test=c*b; // Possible overflow
if (c_test/b != c) {/* There has been an overflow*/}
else c=c_test; // No overflow
有没有更好的方法来测试溢出?我知道有些芯片有一个内部标志,当溢出发生时设置,但我从未见过它通过C或C++访问。
注意EYZ0溢出是C和C++中未定义的行为,因此您必须在不实际导致它的情况下检测它。关于添加之前的签名int溢出,请参阅检测C/C++中的有符号溢出。