Pagini recente » Cod sursa (job #2934825) | Cod sursa (job #2077806) | Cod sursa (job #2565155) | Cod sursa (job #2471380) | Cod sursa (job #155974)
Cod sursa(job #155974)
#include<string.h>
#include<math.h>
#include<stdio.h>
#include<fstream>
using namespace std;
int t,n,uc=0;
int calculat[100]={-1};
int putere[100]={-1};
ifstream fin("cifra.in");
void citeste()
{ char c[100]={0};
int count=0;
fin.get(c,100,'\n');
fin.get();
count=strlen(c);
switch (count)
{ case 1: {n=c[0]-'0';break;}
case 2: {n=10*(c[0]-'0')+c[1]-'0';break;}
default: n=10*(c[count-2]-'0')+c[count-1]-'0';
}
}
void scrie()
{
printf("%d\n",uc);
}
void rezolva()
{ int i, ir;
int temp;
fin>>t; //Citeste nr de teste
fin.get();
while(t--)
{ citeste(); //Citeste fiecare test
if(calculat[n]==-1) //Verifica sa nu calculeze de 2 ori
{ uc=0;
for(i=1;i<=n;i++) //Fiecare numar i pana la n
{ if(putere[i]==-1) //Nu cumva sa repet calcule ;)
{ temp=i/4;
ir=i-4*temp;
if(!ir) ir=4; //Reduc puterea la i%4
temp=(long long)pow(i,ir)%10; //Calculez uc a puterii
putere[i]=temp;
} else temp=putere[i];
uc+=temp; //Adaug uc la suma
uc%=10;
}
calculat[n]=uc;
} else uc=calculat[n];
scrie();
}
}
int main()
{
freopen("cifra.out","w",stdout);
for(int i=0;i<100;i++) calculat[i]=putere[i]=-1;
rezolva();
fin.close();
return 0;
}