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