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;
}