Cod sursa(job #1693734)

Utilizator sdwolfSDWOLF sdwolf Data 23 aprilie 2016 19:25:00
Problema Cifra Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int last_power_of(int number);

int main() {
  FILE *input, *output;
  int  index, size, number, length;
  int  *computed;
  char *line;

  computed = (int*)  malloc(sizeof(int)  * 100);
  line     = (char*) malloc(sizeof(char) * 101);

  computed[0] = 0;
  for (index = 1; index < 100; index += 1) {
    computed[index] = (computed[index - 1] + last_power_of(index)) % 10;
  }

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

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

  for (index = 0; index < size; index += 1) {
    fscanf(input, "%s", line);
    length = strlen(line);

    if (length == 1) {
      number = line[length - 1] - 48;
    } else {
      number = (line[length - 2] - 48) * 10 + line[length - 1] - 48;
    }

    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 4;
        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;
}