Cod sursa(job #2223169)

Utilizator arvlgeArdeleanu Vlad George arvlge Data 19 iulie 2018 11:44:40
Problema Cifra Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define RET(c,r)\
    case c:\
        return r


int lastDigitPow(int d,int p){
    switch(d){
        RET(0,0);
        RET(1,1);
        case 2:
            switch(p%4){
                RET(0,6);RET(1,2);
                RET(2,4);RET(3,8);
            }
        case 3:
            switch(p%4){
                RET(0,1);RET(1,3);
                RET(2,9);RET(3,7);
            }
        case 4:
            switch(p%2){
                RET(0,6);RET(1,4);
            }
        RET(5,5);
        RET(6,6);
        case 7:
            switch(p%4){
                RET(0,1);RET(1,7);
                RET(2,9);RET(3,3);
            }
        case 8:
            switch(p%4){
                RET(0,6);RET(1,8);
                RET(2,4);RET(3,2);
            }
        case 9:
            switch(p%2){
                RET(0,1);RET(1,9);
            }
    }
}

int CalcLastDigitSum(int n){
    int i,s=0;
    for(i=1;i<=n;i++)
        s=s%10+lastDigitPow(i%10,i);
    return s%10;
}

int main(){
    FILE*fi,*fo;
    int t,n,i;
    int v[100];
    for(i=0;i<=99;i++)
        v[i]=CalcLastDigitSum(i);
    fi=fopen("cifra.in","rt");
    fo=fopen("cifra.out","wt");
    fscanf(fi,"%d",&t);
    for(i=0;i<t;i++){
        fscanf(fi,"%d",&n);
        fprintf(fo, "%d\n", v[n%100] );
    }
    fclose(fi);
    fclose(fo);
    return 0;
}