Вот вам
#include <stdio.h>
int main(void)
{
int dec = 0;
long long int i = 1;
long long int result = 0;
scanf( "%d", &dec );
do
{
int rem = dec % 2;
result = result + rem * i;
i *= 10;
} while ( dec /= 2 );
printf( "%I64u", result );
return 0;
}
Проблема в том, что переменная i
объявлена как имеющая тип int
.Таким образом, значение результата выражения i *= 10
или выражения rem * i
будет вычислено как объекты типа int
, а не как объекты типа long long int
.
Если ввести 1024
тогда вывод будет
10000000000
В общем, ваш подход неверен, потому что размер типа long long int
в любом случае ограничен и не сможет представить все возможные целочисленные значения в двоичной записи.
Вы можете использовать символьный или целочисленный массив цифр вместо объекта типа long long int
.