Перевод десятичного числа в двоичную систему
Перевести целое положительное число, которое вмещается в 4 байта, в двоичную систему, не используя битовых операций, а используя только стандартные встроенные типы.
Исходный код на языке C
#include <stdio.h>
#include <locale.h>
// псевдоним для целочисленного типа с которым будем работать
//typedef char itype;
//typedef short int itype;
//typedef int itype;
//typedef long int itype;
typedef long long int itype;
typedef enum { GN_OK = 0, GN_NEG, GN_ILL, GN_LONG } GNENUM;
GNENUM get_num(itype *num) {
*num = 0;
itype prevnum = 0;
int ch;
// анализируем первый символ
ch = getchar();
if (ch == EOF)
return GN_ILL;
if (ch == '-') {
// анализируем второй символ для правильной диагностики ситуации
int ch2 = getchar();
if (ch2 >= '0' && ch2 <= '9')
return GN_NEG;
else
return GN_ILL;
}
if (ch != '+') // игнорируем символ '+'
ungetc(ch, stdin); // возвращаем первый символ обратно в буфер ввода
while ((ch = getchar()) != EOF) { // конец ввода по ошибке файла
if (ch == '\n') // или по символу конца строки
break;
if (ch < '0' || ch > '9') // найден нецифровой символ
return GN_ILL;
*num = *num * 10 + (ch - '0');
if (*num < prevnum) // проверка на переполнение
return GN_LONG;
prevnum = *num;
}
return GN_OK;
}
void toBin(itype n) {
if (n > 1)
toBin(n / 2);
putchar(n % 2 + '0');
}
int main() {
setlocale(LC_ALL, "Russian");
itype number;
printf("Введите целое положительное число длиной не более %u бит: ", (unsigned int)sizeof(itype)* 8);
GNENUM gn_ret = get_num(&number);
if (gn_ret != GN_OK) {
switch (gn_ret)
{
case GN_NEG:
printf("Введено отрицательное число.\n");
break;
case GN_ILL:
printf("Неверный формат числа.\n");
break;
case GN_LONG:
printf("Введено слишком большое число.\n");
break;
default:
printf("Хня какая-то творится...\n");
break;
}
return 1;
}
// вывод в максимально длинном целочисленном типе
printf("Введено\n 10-тичное:\t%lld\n 16-ричное:\t%llX\n двоичное:\t", (long long int)number, (long long int)number);
// вывод двоичного представления
toBin(number);
printf("\n");
return 0;
}