tienes varios errores... como confundir numeros con caracteres
cad[pos]>=0 && cad[pos]<=9
eso está mal, ya que '0' no es lo mismo que 0... '0' es igual a 48
para resumir el codigo yo recomendaría hacer lo siguiente
num = 0
for(i=0;i<largo-1;i--){
num *= 10;
if(palabra[i] <'0' || palabra[i] >'9')
//error
break;
num += palabra[i]-'0';
}
if(palabra[i]=='-'){
num *= -1;
}else{
num *= 10;
num += palabra[i]-'0';