Hay muchas formas de resolver esto, yo te voy a comentar una posible solución.
Te recomiendo leer el número en una variable de tipo <long long> porque en un <int> no cabe un número de 16 dígitos y después ir guardando cada dígito en un array ya que tal como lo haces en esa cadena podrías escribir cualquier cosa y tener problemas en la ejecución.
Además separar un número en dígitos es un problema muy común cuando empiezas en programación y que viene bien que lo practiques ya que es muy útil.
Una vez guardado el número, si creas un array de memoria estática de tamaño 16 siempre (quiero decir, que no usas memoria dinámica) empieza a guardar los dígitos por el final y así podrás localizar siempre la penúltima posición ya que los 0 estarán al principio, no al final.
Suerte
Gracias, tenia problemas con el long por que no usaba el %ld en el scanf solamente ponia %d por eso habia abandonado ese metodo pero ya lo logre.
Todavia no termino el programa pero lo dejare por aqui por si alguien le puede servir.
#include<stdio.h>
int main (){
long long int num;
int i, c, n;
int mat[16];
printf("Ingrese su numero de tarjeta: "); // printf("%lld", num);
for(i=15; i>=0; i--){
printf("num entrada %lld\n", num
); n = num%10;
printf("el numero es: %d \n", n
); mat[i] = n;
num = num - n;
num = num/10;
printf("num salida %lld\n", num
); }
for (i=0; i<=15; i++){
}
}