# include <stdio.h>
void decimalParaBinario(int decimal) {
char aux[1000000];
int i, indice = 0;
// simples conversão de decimal para binário:
// divida o decimal por 2 enquanto ele for maior que 0,
// sempre acumulando o resto das divisões, que compõem o número binário final.
while (decimal > 0) {
int resto = decimal % 2;
aux[indice++] = resto + '0';
decimal /= 2;
}
// o número binário em aux[] está invertido: 12d --> 0011b.
// abaixo ele será consertado: 12d --> 0011b --> 1100b.
for (i = 0; indice > 0; indice--, i++) {
printf("%c", aux[indice - 1]);
}
}
void fracaoParaBinario(double fracao) {
fracao = fracao - (int)fracao; // removendo a parte inteira: 12.25d --> 0.25d
while (fracao != 0.0) {
fracao *= 2;
int resto = (int)fracao;
fracao -= resto;
printf("%d", resto);
}
}
void decimalComFracaoParaBinario(double numero) {
decimalParaBinario((int)numero);
printf(".");
fracaoParaBinario(numero);
printf("\n");
}
int main() {
double numero;
numero = 12.25;
decimalComFracaoParaBinario(numero);
numero = 62.62510;
decimalComFracaoParaBinario(numero);
return 0;
}