Cod sursa(job #866717)

Utilizator oana_fOana Fiat oana_f Data 28 ianuarie 2013 17:34:27
Problema Factorial Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>

struct relatie {
  long p,n;
} rel[10];

int main() {
  FILE *fi, *fo;
  long p;
  fi = fopen("fact.in", "r");
  fscanf(fi, "%ld", &p);
  fclose(fi);
  fo = fopen("fact.out", "w");
  if (p == 0) {
    fprintf(fo,"1");
  } else {
    long n = 0, c, r;
    int i = 0;
    int found = 1;
    rel[i].p = 1;
    rel[i].n = 5;
    while ((p/rel[i].p) >= 5) {
      i++;
      rel[i].p = rel[i-1].p + rel[i-1].n;
      rel[i].n = rel[i-1].n * 5;
    }
    for (;i >= 0 && found; i--) {
      c = p / rel[i].p;
      r = p % rel[i].p;
      if (c == 5 || r == 5) {
	found = 0;
	n = -1;
      } else {
	n += c * rel[i].n;
	p = r;
      }
      if (r == 0)
	 i = -1;
    }
    fprintf(fo, "%ld", n);

  }
  fclose(fo);
  return 0;
}