Cod sursa(job #1521751)

Utilizator Belu99Bibo Bela Belu99 Data 10 noiembrie 2015 20:09:06
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.7 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,q;
    if(b%10==0)
        s1=((b/10)*7)%10;
    else
    {
        a=b;
        while(a%10!=0)
            a--;
        s1=((a/10)*7)%10;
        for(q=a+1;q<=b;q++)
            {
                if(q%10==1)
                    s1=(s1+1)%10;
                    else
                        if(q%10==2)
                            {
                                if(((q%100)/10)%2==1)
                                    s1=(s1+6)%10;
                                else
                                    s1=(s1+4)%10;
                            }
                            else
                                if(q%10==3)
                                    {
                                        if(((q%100)/10)%2==1)
                                            s1=(s1+3)%10;
                                        else
                                            s1=(s1+7)%10;
                                    }
                                    else
                                        if(q%10==4)
                                            s1=(s1+6)%10;
                                        else
                                            if(q%10==5)
                                                s1=(s1+5)%10;
                                                else
                                                    if(q%10==6)
                                                        s1=(s1+6)%10;
                                                    else
                                                        if(q%10==7)
                                                        {
                                                            if(((q%100)/10)%2==1)
                                                                s1=(s1+7)%10;
                                                            else
                                                                s1=(s1+3)%10;
                                                        }
                                                        else
                                                            if(q%10==8)
                                                            {
                                                                if(((q%100)/10)%2==1)
                                                                    s1=(s1+4)%10;
                                                                else
                                                                    s1=(s1+6)%10;
                                                            }
                                                            else
                                                                if(q%10==9)
                                                                    s1=(s1+9)%10;

            }
    }
    return s1;
}
int xsiy(int c,int d,int a,int b)
{
    if(b==0)
        d=c+a*1000;
    else
    {
        if(a=='0')
            d=c+b*100;
        else
            d=c+a*1000+b*100;
    }
    return d;
}
void adunarea(int &x,int &y,int a,int b)
{
    y=xsiy(x,y,a,b);
    s=(s+suma(y))%10;
    x=y%100;
}
void adunarea2(int &x,int &y,int a,int b)
{
    b=9;
    a=9;
    xsiy(x,y,a,b);
    s=(s+suma(y))%10;
    x=y%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'))
                adunarea(x,y,N[i-1]-'0',N[i]-'0');
            else
                adunarea2(x,y,N[i-1]-'0',N[i]-'0');
        }
        }
        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'))
                adunarea(x,y,N[i-1]-'0',N[i]-'0');
            else
                adunarea2(x,y,N[i-1]-'0',N[i]-'0');
        }
        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;
}