Pagini recente » Cod sursa (job #733624) | Cod sursa (job #1217992) | Cod sursa (job #2671071) | Cod sursa (job #2980981) | Cod sursa (job #3321691)
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
ifstream fin("cifra.in");
ofstream fout("cifra.out");
bool este_gol(char s[101] )
{
int i;
for(i=0; i<strlen(s); i++)
{
if(s[i]!='0')
{
return false;
}
}
return true;
}
int cazuri[10] = {0, 1, 5, 12, 18, 23, 29, 36, 42, 51};
int main() ///cifrele se repeta din 20 in 20 de nr, deci as putea face un vector la inceput cu toate valorile
{
char s[101];
int t, i, c;
fin>>t;
fin.ignore();
for(i=0; i<t; i++)
{
fin.getline(s, 100);
int suma = 0;
if(strlen(s) == 1)
{
suma += cazuri[ s [ strlen(s) - 1 ] - '0' ];
}
else
{
//aici iti trebuie inca un do while sirul diferit de 0
while(este_gol(s)==false)
{
c = s[strlen(s) - 1] - '0';
int nr = (s[strlen(s) - 2] - '0') * 10 + (s[strlen(s) - 1] - '0');
while (c != 0)
{
switch(c)
{
case 2:
case 8:
if(nr % 4 == 2)
suma += 4;
else
suma += 6;
break;
case 3:
if(nr % 4 == 1)
suma += 3;
else
suma += 7;
break;
case 7:
if(nr % 4 == 1)
suma += 7;
else
suma += 3;
break;
case 4:
suma += 6;
break;
default:
suma += c;
break;
}
c--;
nr--;
s[strlen(s)-1]=c+'0';
for(int j=strlen(s)-1;j>=0;j--)
{
if(s[j]=='0')
{
s[j]='9';
}
else
{
s[j]--;
break;
}
}
}
//aici iti trebuie inca un while care sa mearga in stanga pana la prima cifra diferita de 0, sa ii scada 1
// si apoi cand se intoarce usor spre stanga, le face pe toate 9
//
//}while(); asta ar fi acolada de la do while=ul mentionat mai sus
}
}
fout<<suma%10 <<"\n";
}
return 0;
}