Asuntos Oficiales > Retos
Extensiones Decimales
p_sufan:
Este problema sale planteado en http://acm.uva.es/p/v2/202.html, me gusto y lo hice.
Esta página la conoci gracias a solocodigo...
El reto a continuación:
La extensión decimal de la fracción 1/33 es 0.030300303..., donde 03 se repite indefinidamente. De hecho, la extensión decimal de cada número racional (fracción) tiene un ciclo de repetición (comparado con las extensiones decimales de los números irracionales que no tienen tal ciclo de repetición). Aquí vamos a utilizar paréntesis para incluir el ciclo de repetición.
Hacer un programa que indique el ciclo que se repite.
Fecha maxima..... una Semana (tomando en cuanta que yo estuve varias horas con el bicho)
Entrada
76 25
5 43
1 397
Salida
76/25 = 3.04(0)
1 digitos que se repiten
5/43 = 0.(116279069767441860465)
21 = digitos que se repiten
1/397 = 0.(00251889168765743073047858942065491183879093198992...)
99 = digitos que se repiten
Parece fácil pero tiene su maña... :comp:
p_sufan:
Ya casi cuarenta y ocho horas de la presentación del problema este y nadie responde... no, no tuvo exito... bueno, aqui va el código... en Turbo C...
--- Código: Text --- #include <conio.h>#define MAX 3000 int revisa (int vr[], int *pi, int *pf, int pvr){int i,j,igual=0; i=0;j=pvr-1; while(!igual && i<j) { if (vr[i]==vr[j]) { igual=1; *pi=i; *pf=j; } i++;} return igual;} main(){long n,d,r,c,ent=0,entero=0;int pd=0,pi=0,pf=0,lar=0,seguir=1;int vr[MAX], pv=0,pvr=0,i,j,c_0=0,rep;char v[MAX]; clrscr(); scanf ("%li %li",&n,&d);if (n%d==0) entero=1; if (n>=d) { ent=n/d; n=n%d; while (ent) { v[pv++]=ent%10+'0'; ent/=10; pd++; } for (i=0;i<pv/2;i++) { j=v[i]; v[i]=v[pv-i-1]; v[pv-i-1]=j; } } while (pv<MAX && n && seguir) { vr[pvr++]=n; if (revisa(vr,&pi,&pf,pvr)) { seguir=0; rep=pv-(pf-pi); continue; } n=n*10; c=(n/d)%10; n=n%d; v[pv++]=c+'0'; } if (seguir==0) { printf ("\n "); if (!pd) printf ("0"); for (i=0;i<MAX && i<pv;i++) { if (pd==0) printf ("."); if (rep==0) printf ("("); printf ("%c",v[i]); pd--; rep--; } printf (")"); printf ("\n %i digito(s) se repite(n)",pf-pi); }else { printf ("\n "); if (!pd) printf ("0"); for (i=0;i<MAX && i<pv;i++) { if (pd==0) printf ("."); if (rep==0) printf ("("); printf ("%c",v[i]); pd--; } if (entero) printf ("."); printf ("(0)"); printf ("\n 1 digito repite",pf-pi); } getch(); }
La maña estaba no en los cuocientes, pues uno nunca sabe si son parte de una secuencia mas grande, estaba en los remanentes, en la repetición de estos...
Bueno, no hubo fiebre de programación, pero espero mas furor para la próxima vez... nos vemos...
Pablo Sufan :hola:
JuanK:
Hola ante todo gracias,
diste muy poco tiempo para el reto, los restos deben durar un tiempo considerable publicados, para que le gente se interese despues de un tiempo pues no todo el mundo entra al foro todos los dias ni ve todas las publicaciones todos los dias ni tiene toiempotodos los dias, de hecho las personas que mas participan en los foros suelen ser las que trabajan y tienen otras obligaciones como la universidad, la familia etc.
p_sufan:
Vale JuanK, estaba pensando que nadie estaba interesado en mi reto (que no era mio en realidad, es de la ACM) pero bueno... a propósito JuanK ¿tu sabes algo de la ACM?, donde se puede conseguir información en alguna universidad, instituto, etc. Te lo agradecería.... bueno, voy a ver otro reto... nos vemos (o escribimos)...
Pablo Sufan G. :kicking:
JuanK:
ya hace un tiempo que no m conecto con ese tema y de hecho hace ya tiempo que nisiquiera participo en las competencias, por ahi tengo un pequeño repositorio de jerciioc para hacerlos algun dia...
Navegación
[#] Página Siguiente
Ir a la versión completa