Я писал программу в C++, чтобы найти все решения a b= c, где a, b и c вместе используют все цифры 0-9 ровно один раз. Программа зациклилась на значениях a и b и каждый раз запускала процедуру подсчета цифр для a, b и a b, чтобы проверить, было ли выполнено условие цифр.
Однако ложные решения могут быть сгенерированы, когда 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++.
Помните, что переполнение со знаком int
является неопределенным поведением в C и C++, и, таким образом, вы должны обнаружить его, фактически не вызывая его. Информацию о переполнении со знаком int перед добавлением смотрите в разделе Обнаружение переполнения со знаком в C/C++.