g_functors[!!n] — это упрощение. Идея в том, чтобы любое число не 0 преобразовать в 1, а 0 в 0, но, согласен, более чисто с математической (и программно-ассемблерной) точки зрения это сделано в комментариях других авторов.
Спасибо Ваша решимость делает Вам честь. Надо сказать, доля юмора в коде, говорит о том, что современные программисты, как и программисты прошлого не только прагматики — бездушные машины по написанию кода, но и поэты.
Я полагаю, что в данном случае for(;;) тоже самое goto label. Для решения задачи нам нужно какое-то циклическое выражение (главное чтобы не использовать сравнений). В любом случае, когда мы говорим про что-то вроде for(infinity_and_beyond), goto infinity_and_beyond, while(not_reached_infinity_and_beyond) и пр., мы имеем ввиду jmp to_infinity_and_beyond. Так что, я думаю, использовать for(;;) большого греха не будет (если только вы удержитесь и по привычке не напишите for( n=N; n>0;n--); ).
Спасибо. exit(0) — делает все гораздо более элегантным, но в остальном это решение того же качества, оно не дает ничего нового. Это тот же метод. Но все равно спасибо за улучшение.
Дорогие друзья, это задание пришло ко мне так же как и к Вам, поэтому не могу дать ему более внятные разъяснения чем понял сам. Я рассудил так, что в самом коде получения числа и выбор ветки кода не должно встречаться условных операторов т.е. if, for, while, do...while(скрытые операторы) и т.д., а вот за код отвечающий за печать (внутренности printf и пр.) мы не отвечаем.
Если бы можно было использовать for, while и прочее, то задачи бы не было.
Если бы можно было использовать for, while и прочее, то задачи бы не было.