Исходный код на языке C++
#include <cstdio> #include <string> //Сразу напишем общую версию для всех целочисленных типов template <typename T> std::string intToBin(T val) { if (val == 0) return "0"; //Здесь сработает конструктор std::string //Буфер для записи двоичного представления //Всего битов в числе sizeof(T) * 8, и ещё один на терминальный символ char bary[sizeof(T) * 8 + 1]; //Индекс записи в буфер выше int idigit = 0; bool meetOne = false; //Спускаемся от старшего к младшему биту for (int i = sizeof(T) * 8 - 1; i >= 0; i--) { if (val & (T(1) << i)) //Если бит номер i установлен... { //...записываем 1 в соответствующий бит строкового представления //и устанавливаем флаг встречи с 1 meetOne = true; bary[idigit++] = '1'; } else { //...записываем ноль, но только если до этого была единица, //так избавимся от ненужных ведущих нулей if (meetOne) { bary[idigit++] = '0'; } } } //Завершение строки терминальным символом bary[idigit] = '\0'; return bary; //Конструктор std::string } int main() { int val; while (std::scanf("%d", &val) != EOF) { std::printf("%s ", intToBin(val).c_str()); } return 0; }