Fotolog

A través del espejo
2010-10-12: A través del espejo
¡La radio habla en binario!
2010-10-10: ¡La radio habla en binario!
Gigaminx (regalo por mi cumple)
2010-09-16: Gigaminx (regalo por mi cumple)
Trini en bici
2010-09-05: Trini en bici
Valporquero
2010-08-28: Valporquero
Mi bici nueva
2010-08-22: Mi bici nueva
Boda de Mario y Ana
2010-08-13: Boda de Mario y Ana
De cañones en Guara
2010-08-07: De cañones en Guara
Trini y Mari en Marbella
2010-08-05: Trini y Mari en Marbella
Trini y Chelo en Tabarca
2010-08-03: Trini y Chelo en Tabarca
Valid XHTML 1.1
Acceder
Volver a la lista de problemas

Repeating Decimals

202.c

#include <stdio.h>

int
main(void) {
	int num, dem;
	int i;
	int array[10000];
	int ini, len;
	int ok;

	while (1) {
		i = scanf("%d %d", &num, &dem);
		if (i != 2) {
			break;
		}
		printf("%d/%d = %d.", num, dem, num/dem);
		num %= dem;
		for (i=0; i<10000; i++) {
			num *= 10;
			array[i] = num/dem;
			num %= dem;
		}
		ok=0;
		for (ini=0; ini<5000; ini++) {
			for (len=1; len<5000; len++) {
				ok=1;
				for (i=ini+len; i<10000; i++) {
					if (array[i] != array[ini+(i-ini)%len]) {
						ok=0;
						break;
					}
				}
				if (ok) break;
			}
			if (ok) break;
		}
		for (i=0; i<50; i++) {
			if (i==ini) {
				printf("(");
			}
			if (i==ini+len) {
				printf(")");
				break;
			}
			printf("%d", array[i]);
		}
#if DEBUG
		printf("[i=%d, ini=%d, len=%d]\n", i, ini, len);
#endif
		if (i==50 && ini+len >= i) {
			printf("...)");
		}
		printf("\n   %d = number of digits in repeating cycle\n\n", len);
	}
	return 0;
}