Páginas: [1]
|
 |
|
Autor
|
Tema: Empezando con el sistema binario (Leído 552 veces)
|
booler
Desconectado
Mensajes: 37
|
Hola, esotoy empezando a programar en C y la profesora me ha pedido un trabajo:
Llamaremos “ceros finales” de un número entero a los que aparecen posteriormente a la última cifra no nula, por ejemplo los tres últimos del número 3056000 o los cuatro últimos del número en binario 1010000(2 . Son muy relevantes en cuanto a la magnitud del número. El factorial (!) de un número entero positivo (el producto de todos los números naturales desde 1 hasta el propio número, por ejemplo, 5!=1*2*3*4*5=120) crece desmesuradamente cuando crece el número. Estudie cómo puede calcularse el número de ceros finales del factorial de un entero positivo cuando este factorial se expresa en decimal y cuando se expresa en binario.
He probado a calcular el factorial de unos cuantos numeoros tanto en binariao como en decimal, contar el numero de ceros de cada numero, mirar como incermentan... pero no veo ninguna relacion, alguien me sugiere algo???
Muchas gracias a todos.
|
|
|
|
« Última modificación: 22 Noviembre 2009, 09:46 por booler »
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 179
|
Hola!!!
En base 2 es muy sencillo. Pasas el numero a base 10. Y ahora por cada vez que 2 divida a uno de los factores que forman el factorial tendras un cero final, ya que en base 2, multiplicar por dos significa añadir un cero al final del numero que tenias.
Al trabajar en base 10, el algoritmo es parecido, solo que tendras que tener en cuenta que tendras que distinguir algun caso mas (no es tan directo aunque si igual de sencillo).
Piensalo y si no lo sacas vuelve a postear.
Hasta luego!!!
|
|
|
|
|
En línea
|
"Nunca pertenecería a un club que admitiera como socio a alguien como yo". Groucho Marx
|
|
|
booler
Desconectado
Mensajes: 37
|
no te he entendido nada, jejeje.
pero acabo de hacer un programilla con el vi de linux, y aun poniendo la variable como double, nu alcanza mas precision que la calculadora de windows
|
|
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 179
|
Paso por paso. Si quiero saber cuantos ceros finales tiene el numero 4! en binario que es lo que hago:
4! = 4·3·2·1;
2|4 -> Por lo menos tiene un cero final. 4/2 = 2 ------> 2|2 ->Ahora sabemos que por lo menos tiene dos ceros. 2/2 = 1------ > 2 no divide a uno ----->Ya hemos terminado con el 4.
2 no divide a 3------> Hemos terminado con el 3
2|2 -> Ya tenemos al menos tres ceros finales. 2/2 = 1------> 2 no divide a 1------>Terminamos con el 2
2 no divide a 1---->Terminamos con el 1.
Ultimo recuento de ceros: 3 ceros.
Ahora si lo compruebas 24(10 = 11000(2
Que era lo que buscabamos.
Ahora te toca pasarlo a codigo y si quieres, una vez que lo tengas, utilizando arrays para almacenar los datos que vas obteniendo, puedes optimizar el calculo de los ceros.
Por supuesto, el caso decimal te corresponode a ti. Con unas pocas modificaciones a lo anterior ya lo tienes hecho.
|
|
|
|
|
En línea
|
"Nunca pertenecería a un club que admitiera como socio a alguien como yo". Groucho Marx
|
|
|
booler
Desconectado
Mensajes: 37
|
Muchiiiiiissssiiiiiiiiimas gracias!!!!!!!!!!!!!!!
me costo entenderte, pero consegui hacer la relación y una vez la habia sacado me puse a releer lo que me habias puesto y estaba totalmente correcto.
pero tengo ahora una duda, parece que no te costo mucho llegar a la solucion, ¿habias trabajado alguna vez sobre el tema o algo?????
muchisimas gracias.
|
|
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 179
|
No, nunca habia trabajado, pero es sencillo en cuanto entiendes lo que es una base de nueracion y la numeracion posicional.
|
|
|
|
|
En línea
|
"Nunca pertenecería a un club que admitiera como socio a alguien como yo". Groucho Marx
|
|
|
|
Páginas: [1]
|
|
|
|