¿Cómo funciona la función pow?

Después de compilar el siguiente programa obtengo el resultado "2346" pero esperaba "2345".

#include<math.h>
#include<iostream.h>
int nr_cif(int a)
{
    int k=0;
    while(a!=0)
    {
        a = a/10;
        k++;
    }
    return k;
}

void Nr(int &a){
    int k = nr_cif(a);
    a = a % (int)pow(10,k-1);
}


int main()
{
    int a = 12345;
    Nr(a);
    cout<<a;
}

Después de la depuración, noté que falla después de evaluar: a = a% (int) pow (10, k-1). ¿Por qué se rompe aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta