Cod sursa(job #1521725)

Utilizator Belu99Bibo Bela Belu99 Data 10 noiembrie 2015 19:51:15
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.87 kb
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
string N;
int T,x,y,i,n,j,s;
int suma(int b)
{
    int s1=0,a;
    if(b%10==0)
        s1=((b/10)*7)%10;
    else
    {
        a=b;
        while(a%10!=0)
            a--;
        s1=((a/10)*7)%10;
        for(i=a+1;i<=b;i++)
            {
                if(i%10==1)
                    s1=(s1+1)%10;
                    else
                        if(i%10==2)
                            {
                                if(((i%100)/10)%2==1)
                                    s1=(s1+6)%10;
                                else
                                    s1=(s1+4)%10;
                            }
                            else
                                if(i%10==3)
                                    {
                                        if(((i%100)/10)%2==1)
                                            s1=(s1+3)%10;
                                        else
                                            s1=(s1+7)%10;
                                    }
                                    else
                                        if(i%10==4)
                                            s1=(s1+6)%10;
                                        else
                                            if(i%10==5)
                                                s1=(s1+5)%10;
                                                else
                                                    if(i%10==6)
                                                        s1=(s1+6)%10;
                                                    else
                                                        if(i%10==7)
                                                        {
                                                            if(((i%100)/10)%2==1)
                                                                s1=(s1+7)%10;
                                                            else
                                                                s1=(s1+3)%10;
                                                        }
                                                        else
                                                            if(i%10==8)
                                                            {
                                                                if(((i%100)/10)%2==1)
                                                                    s1=(s1+4)%10;
                                                                else
                                                                    s1=(s1+6)%10;
                                                            }
                                                            else
                                                                if(i%10==9)
                                                                    s1=(s1+9)%10;

            }
    }
    return s1;
}
void xsiy(int &x,int &y)
{
    if(N[i]=='0')
        y=x+(N[i-1]-'0')*1000;
    else
    {
        if(N[i-1]=='0')
            y=x+(N[i]-'0')*100;
        else
            y=x+((N[i-1]-'0')*1000+(N[i]-'0'))*100;
    }
}
int main()
{
    ifstream f("cifra.in");
    ofstream g("cifra.out");
    f>>T;
    for(j=0;j<=T;j++)
    {
        x=0;
        s=0;
        getline(f,N);
        n=N.size();
        if(n>5)
        {
        if(n%2==0)
        {
            y=(N[n-2]-'0')*10+(N[n-1]-'0');
            s=(s+suma(y))%10;
            x=y;
        for(i=n-3;i>=1;i=i-2)
        {
            if((N[i]=='0' and N[i-1]!='0')or (N[i]!='0' and N[i-1]=='0')or(N[i]!='0' and N[i-1]!='0'))
            {
                xsiy(x,y);
                s=(s+suma(y))%10;
                x=y%100;
            }
            else
            {
                N[i]='9';
                N[i-1]='9';
                xsiy(x,y);
                s=(s+suma(y))%10;
                x=y%100;
            }
        }
        }
        else
         {
            y=(N[n-2]-'0')*10+(N[n-1]-'0');
            s=(s+suma(y))%10;
            x=y;
        for(i=n-3;i>=3;i=i-2)
        {
            if((N[i]=='0' and N[i-1]!='0')or (N[i]!='0' and N[i-1]=='0')or(N[i]!='0' and N[i-1]!='0'))
            {
                xsiy(x,y);
                s=(s+suma(y))%10;
                x=y%100;
            }
            else
            {
                N[i]='9';
                N[i-1]='9';
                xsiy(x,y);
                s=(s+suma(y))%10;
                x=y%100;
            }
        }
        i=1;
        y=x+N[i]*100;
        s=(s+suma(y))%10;
        }
        }
        else
            {
                for(i=0;i<n;i++)
                    x=x*10+(N[i]-'0');
                s=suma(x);
            }
        if(s!=0)
        g<<s<<endl;
        N.erase(0,n-1);
    }
    return 0;
}