Errore di programmazione?

Salve, avrei un problema nella programmazione: se digito un numero con più di due cifre il risultato non è giusto ( sbaglia di 1 alla prima cifra) cioè se premo il tasto 1, poi il 2 e poi il 3 dando la conferma con il tasto * del tastierino, il numero acquisito che leggo sulla seriale non è 123 ma appunto 122.. Non riesco a trovare l'errore nel programma che vi posto qui di seguito. Grazie in anticipo.

void loop()
{
 
  char key;


   j=0;
   int n=0;
   while(key !='*'){
     key = keypad.getKey();
     if (key != NO_KEY && j<6){
        Serial.print("*");
        Serial.println(key);
       keyInsert[j]=key;
       j++;
      }
    }
    
    
    Serial.print("numero acquisito a ");
    Serial.print(5-j);
    Serial.println(" cifre"); 
    long numero=0;
   int p=0;
    n=j-1;
  for (j=0 ; j<n; j++){
    p=n-j-1;
     Serial.println((int)keyInsert[j]);
     int num=(int)(((keyInsert[j])-48)*(pow(10,p)));
     numero+=num;
 
       Serial.println(((keyInsert[j])-48)*(pow(10,p)));
       Serial.println(numero);
      
      }
       
 
  
}

ciao non so se ho individuato l'errore, ma qualcosa mi sembra poco chiaro, per me è un errore della funzione pow() che restituisce numeri non interi e potrebbe non funzionare con esponenti diversi da >=2

for (j=0 ; j<n; j++){
    p=n-j-1;
     Serial.println((int)keyInsert[j]);
     int num=(int)(((keyInsert[j])-48)*(pow(10,p)));


/* supponiamo che in numero di cifre sia 3 n=3, si avrebbe che j raggiunge il valore massimo 2
   e 
   p=n-j-1 diventa 3-2-1=0 , come funziona pow(10,0) ????

  se invece la condizione fosse 


int k=0;
int moltiplicatore=1;
for (j=0 ; j<n; j++){
    p=n-j-1;
    for(k=0;k<p;k++)
         moltiplicatore*=10;
     Serial.println((int)keyInsert[j]);
     int num=0;
    
    num=(int)(((keyInsert[j])-48)*moltiplicatore);
      moltiplicatore=1;

Potrebbe essere anche un errore di indice del array.
Ciao Uwe