Cod sursa(job #830767)

Utilizator grinderBogdan Perian grinder Data 7 decembrie 2012 17:29:40
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 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;

     while(!(curr>x))
     { 
        //::cout << "Starting: " << curr << endl;
         int c = curr[curr.size()-1]-'0';
         counter = "1";
         th=1;

         do
         {
          th = (th*c)%10;
           counter = add(counter);
         }while(!(counter>curr));
          
      //   ::cout << "TH: " << th << endl;    
         final = (final+th)%10;

         curr = add(curr);
     }
    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;
}