Cod sursa(job #1010727)

Utilizator iulia_infoIulia Cosmin iulia_info Data 15 octombrie 2013 16:26:24
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

ifstream input("cifra.in");
ofstream output("cifra.out");
 
int last_digit(string number_str) {
  // All that matters is the last two digits of the number,
  // because the last digit of the sum of every 100 consecutive
  // terms is 0.
  string::iterator it;
  it = number_str.end();
  it--; // To get rid of new line.
  int number = *it - '0';
  if (it > number_str.begin()) {
    it--; 
    number += (*it - '0') * 10;
  }
  int sum = 0;
  for (int i = 1; i <= number; i++) {
    switch(i)
    {
      // Cases in which i^i always ends in the same digit.
      case 1: sum += 1; break;
      case 4: sum += 6; break;
      case 5: sum += 5; break;
      case 6: sum += 6; break;
      case 8: sum += 8; break;
      case 9: sum += 9; break;
      // Cases in which the last digit of i^i depends on the
      // form of i.
      case 2: if (i % 4 == 2) { sum += 4; } else { sum += 6; } break;
      case 3: if (i % 4 == 3) { sum += 7; } else { sum += 3; } break;
      case 7: if (i % 4 == 3) { sum += 3; } else { sum += 7; } break;
    }
  }
  return (sum % 10);
}

int main()
{
  int t;
  input >> t;
  for (int i = 0; i < t; i++) {
    string number_str;
    input >> number_str;
    output << last_digit(number_str) << endl;
  }
  output.close();
}