Cod sursa(job #1693688)

Utilizator sdwolfSDWOLF sdwolf Data 23 aprilie 2016 18:14:39
Problema Cifra Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.24 kb
#include <stdio.h>
#include <stdlib.h>

int last_power_of(int number);

int main() {
  FILE *input, *output;
  int  index, size, previous, last, number;
  int  *computed;
  char symbol;

  computed = (int*) malloc(sizeof(int) * 101);

  for (index = 1; index <= 100; index += 1) {
    computed[index] = (computed[index - 1] + last_power_of(index)) % 10;
    // printf("%d %d\n", index, computed[index]);
  }

  computed[0] = 5;

  input  = fopen("cifra.in", "r");
  output = fopen("cifra.out", "w");

  fscanf(input, "%d\n", &size);

  for (index = 0; index < size; index += 1) {
    last = -1;
    while (fscanf(input, "%c", &symbol)) {
      if (symbol == '\n') break;

      previous = last;
      last = symbol - 48;
    }

    if (previous == -1) {
      number = last;
    } else {
      number = previous * 10 + last;
    }

    fprintf(output, "%d\n", computed[number]);
  }

  fclose(input);
  fclose(output);

  return 0;
}

int last_power_of(int number) {
  int reminder;
  int last_number = number % 10;

  switch (last_number) {
    case 1:
    case 5:
    case 6:
      return last_number;
    case 2:
      reminder = number % 4;
      switch (reminder) {
        case 1:
          return 2;
        case 2:
          return 4;
        case 3:
          return 8;
        case 0:
          return 6;
      }
    case 3:
      reminder = number % 4;
      switch (reminder) {
        case 1:
          return 3;
        case 2:
          return 9;
        case 3:
          return 7;
        case 0:
          return 1;
      }
    case 4:
      reminder = number % 2;
      switch (reminder) {
        case 1:
          return 4;
        case 0:
          return 6;
      }
    case 7:
      reminder = number % 4;
      switch (reminder) {
        case 1:
          return 7;
        case 2:
          return 9;
        case 3:
          return 3;
        case 0:
          return 1;
      }
    case 8:
      reminder = number % 4;
      switch (reminder) {
        case 1:
          return 8;
        case 2:
          return 3;
        case 3:
          return 2;
        case 0:
          return 6;
      }
    case 9:
      reminder = number % 2;
      switch (reminder) {
        case 1:
          return 9;
        case 0:
          return 1;
      }
  }

  return 0;
}