#include using namespace std; //Алгоритъмът за събиране с 1 в двоичен запис: //От дясно на ляво - правим всички 1-ци на 0, докато не срещнем първата 0. //Първата 0 я правим на 1. // 101001111 + 1 // 101010000 int main() { unsigned int n; cin >> n; int mask = 1; //Най-десният бит на маската е 1-ца. Всички други са 0-ли. while ((n & mask) > 0) //Проверяваме дали текущия бит е 1-ца. (при първото влизане, проверяваме най-десния) { n ^= mask; // Правим го на 0 ( n = n ^ mask) mask <<= 1; // Отместваме маската, за да проверим бит-а в ляво. (mask = mask << 1) } //Открили сме първата 0. 1-цата е на точната позиция в маската. n |= mask; // Правим на 1-цa (n = n | mask) }