Cod sursa(job #216519)

Utilizator mihaio07Oprea Mihai mihaio07 Data 24 octombrie 2008 19:30:58
Problema Cifra Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<stdio.h>
#include<string.h>


int citire (char *sir)
{
    int i, len;
    len=strlen(sir)-1;
    sir[len]=NULL;
    strrev(sir);
    for (i=0; i<len; i++)
        sir[i]-='0';
    return len-1;       //pozitia ultimei cifre si nu lungimea numarului
}

void decrement (char *sir, int *len)
{
    int i=0;
    sir[i]--;
    while (sir[i]==-1)
    {
        sir[i]=9;
        i++;
        sir[i]--;
    }
    if ( i==(*len) && sir[i]==0 ) 
        (*len)--;
}

int construct4 (char *sir)  //ultimele 2 cifre pentru verificare restului la 4
{
    return (sir[0]+sir[1]*10);
}
    

int main()
{
    FILE *in, *out;
    char n[102];
    int valori[10][4]={{0},{0},{6,2,4,8},{1,3,9,7},{6,4,6,4},{0},{0},{1,7,9,3},{6,8,4,2},{1,9,1,9}};
    int ocifra[10]={0, 1, 4, 7, 6, 5, 6, 3, 6, 9};          //cifrele de la 1 la 9
    int i, L, ucif, putere, scif=0, nr, T, contor;
    in=fopen("cifra.in", "r");
    out=fopen("cifra.out", "w");

    fscanf(in, "%d", &T);
for (contor=1; contor<=T; contor++)
{   
    fgets( n,101,in );
    scif=0; 
    L=citire(n);   
    while (L>1)       //cat timp numarul are minim 2 cifre, ca sa mearga cu construct4
    {
        ucif=n[0];
        if (ucif==0 || ucif==1 || ucif==5 || ucif==6)
            scif+=ucif;
        else
        {
            putere=construct4(n)%4;
            scif+=valori[ucif][putere];
        }
        scif=scif%10;
        decrement(n,&L);
    }
    
    nr=n[0];
    for (i=1; i<=nr; i++)
        scif+=ocifra[i];
    scif=scif%10;
    
    fprintf(out, "%d", scif);
}
    
    return 0;
}