#include #define MAX 1000000 int main(void) { int cit, jmen, j, i = 0, zac = 0; // Vlastnost jazyka C -- rychlé vynulování pole. // Protože pole je plné nul, ukládám si pozici // o jedna vyšší než skutečnou. int zb[MAX] = {0}; char vysl[MAX]; FILE *fin, *fout; fin = fopen("zlomky.in", "r"); fscanf(fin, "%d %d\n", &cit, &jmen); fout = fopen("vysledek.out", "w"); if (cit >= jmen) { zac = cit/jmen; cit %= jmen; } fprintf(fout, "%d.", zac); if (!cit) fprintf(fout, "0"); while (cit) { zb[cit] = i+1; cit *= 10; vysl[i] = cit / jmen + '0'; i++; cit %= jmen; if (zb[cit]) break; } // Abychom nemuseli vypisovat po znacích, // vytvoříme si před začátkem periody "zarážku". if (cit) { j = vysl[zb[cit] - 1]; vysl[zb[cit] - 1] = 0; } vysl[i] = 0; fprintf(fout, "%s", vysl); if (cit) { fprintf(fout, "("); vysl[zb[cit] - 1] = j; vysl[i++] = ')'; vysl[i] = 0; fprintf(fout, "%s", vysl + zb[cit] - 1); } return 0; }