Cod sursa(job #1229224)

Utilizator Alex_dudeDudescu Alexandru Alex_dude Data 16 septembrie 2014 19:10:23
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <fstream>
#include <string.h>
#include <iostream>
using namespace std;

ifstream f("cifra.in");
ofstream g("cifra.out");

char c[101],x[10];
long n;

short ucp(char nr[100])
{

    int cif = nr[strlen(nr)-1]-'0', cif2 = (nr[strlen(nr)-2]-'0')*10+(nr[strlen(nr)-1]-'0'),sum=0;
    if(strlen(nr)==1)cif2=5;
    if(cif==0) return 0;
    if(cif==1) return 1;
    if(cif==5) return 5;
    if(cif==6) return 6;
    for(int i=0;i<strlen(nr);i++)
        {
            sum+=nr[i]-'0';
        }
    if(cif==2)
    {
        if(cif2%4==0)return 6;
        if(sum%3==0)return 8;
        if(cif%2==0)return 4;
        return 2;
    }
    if(cif==3)
    {
        if(cif2%4==0)return 1;
        if(sum%3==0)return 7;
        if(cif%2==0)return 9;
        return 3;
    }
    if(cif==4)
    {
        if(cif%2==0)return 6;
        return 4;
    }
    if(cif==7)
    {
        if(cif2%4==0)return 1;
        if(sum%3==0)return 3;
        if(cif%2==0)return 9;
        return 7;
    }
    if(cif==8)
    {
        if(cif2%4==0)return 6;
        if(sum%3==0)return 2;
        if(cif%2==0)return 4;
        return 8;
    }
    if(cif==9)
    {
        if(cif%2==0)return 1;
        return 9;
    }
}
void scadere (char nr[100])
{int i=1;
  if(nr[strlen(nr)-1]-'0'-1>0)nr[strlen(nr)-1]=nr[strlen(nr)-1]-1;
  else {while(nr[strlen(nr)-i]-'0'==0&&i<strlen(nr))
  {nr[strlen(nr)-i]='9';i++;}
  nr[strlen(nr)-i]-=1;
  }
  if(nr[0]=='0'&&nr[1]>0){nr[0]=nr[1];nr[1]=0;}
}
short uc(char nr[100])
{
    short ult=0;
  while(nr[0]!='0')
  {
   ult+=ucp(nr);
   ult=ult%10;
   scadere(nr);
  }
  return ult;
}
int main()
{
    short sum;
f>>n;
f.get();
for(int i=1;i<=n;i++)
{
   f.getline(c,101);
   g<<uc(c)<<'\n';
}

    return 0;
}