Salve, mi scuso per il titolo ambiguo o poco comprensibile, ma è difficile "dargli un nome".
Vi spiego ciò che devo fare, e ciò che ho fatto, sperando di avere qualche consiglio sull'ottimizzazione (correzione).
1_Allora, il programma prende in input un esadecimale di 6 caratteri.
2_Converte tale numero in decimale
3_Considera solo le ultime sette cifre
4_Calcola un checksum, e una differenza.
Esempio Numerico:
Input=A28B36
Output=06524708
2__> A28B36 -> 10652470
3__> 10652470 -> 0652470
4__>
codice:0 x3 = 00 + 6 x1 = 06 + 5 x3 = 15 + 2 x1 = 02 + 4 x3 = 12 + 7 x1 = 07 + 0 x3 = 00 + Tot. = 42 , Da sottrarre al multiplo di 10 superiore, quindi 50 – 42 = 8 0652470 -> 06524708
Spero sia chiaro.
Questo il codice che ho scritto:
codice:#include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #include <math.h> void convertUp(char *s) { int i; for(i=0;i<6;i++) s[i]=toupper(s[i]); } int calc(int *a) { int sum1=0; int sum3=0; int sumtot=0; int i; int diff=0; long int decimal=0; int exp=6; for(i=0;i<7;i++) { decimal=decimal+(a[i]*pow(10,exp)); exp--; } for(i=6;i>=0;i=i-2) sum3=sum3+(a[i]*3); for(i=5;i>=1;i=i-2) sum1=sum1+a[i]; sumtot=sum1+sum3; diff=(((sumtot/10)+1)*10)-sumtot; printf("Calc And Adding Checksum: %d\n",sumtot); printf("Difference Number: %d\n\n",diff); if(diff!=10) printf("OUTPUT is: %07ld%d\n\n",decimal,diff); else { printf("The First Possible OUTPUT is: %07ld0\n\n",decimal); printf("The Second Possible OUTPUT is: %07ld1\n\n",decimal); } return 0; } int * deconversion(char *s) { long int sum=0; int exp=0; int i=5; int *results; results=(int*)malloc(7*sizeof(int)); while(i>=0){ if(s[i]>='A' && s[i]<='F') sum=sum+(s[i]-55)*pow(16,exp); else sum=sum+(s[i]-48)*pow(16,exp); exp++; i--; } for(i=6;i>=0;i--) { results[i]=sum%10; sum=sum/10; } return results; } int main() { char wps[6]; int *results; scanf("%s",wps); convertUp(wps); results=deconversion(wps); calc(results); return 0; }

Rispondi quotando