Cod sursa(job #1521751)
Utilizator | 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;
}