Cod sursa(job #830772)

Utilizator grinderBogdan Perian grinder Data 7 decembrie 2012 17:46:47
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <string>
#include <iostream>
#include <cstdlib>
#include <unistd.h>
using namespace std;

string add(string t)
{
    int last = t.size()-1;
    int c = 0;
    t[last]++;  
    int first=1;
  while((first||c)&&last>=0)
    {
          if(first) first=0;

         c = c+t[last]-'0';
         t[last] = (char)(c%10+'0');
         last--;
         c/=10;
    }
    
  
    if(c)
    {
          t = "0"+t;
   	 t[0] = (char)(c%10+'0');
    }
    return t;
}

int lastDigit(string x)
{
     string curr = "1";
     string counter;
     int final=0;
     int th;
     int c;
   /*for i=1 to x */
     do
     { 
         c = curr[curr.size()-1]-'0';
         counter = "1";
         th=1;
         /* th = 1^1+2^2+..+x^x */
         //::cout << curr << " ";
         do
         {
           th = (th*c)%10;
           counter = add(counter);
         }while(!(counter>curr));
 
         //::cout << curr << " ";
         final = (final+th)%10;
        // ::cout << final << endl;
         curr = add(curr);
     }while(curr!=add(x));
    return final;
}


int main()
{
  int t;
  string x;

  ifstream cin("cifra.in");
  ofstream cout("cifra.out");
 
  cin >> t;
  while(t)
  {
      cin >> x; 
      cout << lastDigit(x) << endl;  
      t--;   
  }
  cin.close();
  cout.close();
 
  return 0;
}