Cod sursa(job #1402716)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 26 martie 2015 19:09:50
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.86 kb
#include <cstdio>
#include <algorithm>
#include <string.h>

using namespace std;

char v[105];

int main(){
    int last,t,i,j,k;
    freopen("cifra.in", "r", stdin);
    freopen("cifra.out", "w", stdout);
    scanf("%d",&t);
    for(i = 1;i <= t;i++){
        scanf("%s",&v);
        if(strlen(v) > 1){
            k = -1;
            while((v[strlen(v) - 1] - '0') == 1 || (v[strlen(v) - 1] - '0') == 2 || (v[strlen(v) - 1] - '0') == 3 || (v[strlen(v) - 1] - '0') == 4 || (v[strlen(v) - 1] - '0') == 5 || (v[strlen(v) - 1] - '0') == 6 || (v[strlen(v) - 1] - '0') == 7 || (v[strlen(v) - 1] - '0') == 8 || (v[strlen(v) - 1] - '0') == 9){
                k++;
                v[strlen(v) - 1]++;
            }
            if(k > 0){
                v[strlen(v) - 2]++;
            }
            last = ((v[strlen(v) - 2] - '0')*7)%10;
            if((v[0] - '0')%2 == 0){
                j = 9;
                while(k > 0){
                    switch(j){
                        case 9: last = last - 9;
                                break;
                        case 8: last = last - 4;
                                break;
                        case 7: last = last - 7;
                                break;
                        case 6: last = last - 6;
                                break;
                        case 5: last = last - 5;
                                break;
                        case 4: last = last - 6;
                                break;
                        case 3: last = last - 3;
                                break;
                        case 2: last = last - 6;
                                break;
                        case 1: last = last - 1;
                                break;
                    }
                    k--;
                    j--;
                    if(last < 0){
                        last = 10 + last;
                    }
                }
                printf("%d\n",last);
            }else{
                j = 9;
                while(k > 0){
                    switch(j){
                        case 9: last = last - 9;
                                break;
                        case 8: last = last - 6;
                                break;
                        case 7: last = last - 3;
                                break;
                        case 6: last = last - 6;
                                break;
                        case 5: last = last - 5;
                                break;
                        case 4: last = last - 6;
                                break;
                        case 3: last = last - 7;
                                break;
                        case 2: last = last - 4;
                                break;
                        case 1: last = last - 1;
                                break;
                    }
                    k--;
                    j--;
                    if(last < 0){
                        last = 10 + last;
                    }
                }
                printf("%d\n",last);
            }
        }else{
            switch(v[0] - '0'){
                case 1 : printf("1\n");
                        break;
                case 2 : printf("5\n");
                        break;
                case 3 : printf("2\n");
                        break;
                case 4 : printf("8\n");
                        break;
                case 5 : printf("3\n");
                        break;
                case 6 : printf("9\n");
                        break;
                case 7 : printf("2\n");
                        break;
                case 8 : printf("8\n");
                        break;
                case 9 : printf("7\n");
                        break;
            }
        }
    }
    return 0;
}