Ok mil gracias. Una cosa, me dices que la ventaja de usar templates aquí es que parte del los cálculos se realizan en tiempo de compilación pero si el valor es solicitado en tiempo de ejecución ¿que cálculos va a hacer en tiempo de compilación?
Ahora mismo lo tengo así y funciona perfecto:
Código C:
Ver original#include <stdio.h>
unsigned long Exponente(int e)
{
return (e>0)? 10*Exponente(e-1) : 1;
}
int ObtenerDigito(unsigned long valor, unsigned indice)
{
valor %= Exponente(indice+1);
valor /= Exponente(indice);
return valor;
}
unsigned long ReemplazarDigito(unsigned long valor, unsigned indice, unsigned nuevoDigito)
{
unsigned long superior = valor / Exponente(indice+1);
unsigned long inferior = valor % Exponente(indice);
return (superior*10+nuevoDigito)*Exponente(indice) + inferior;
}
int CalcularValorDigito(int digito,int a){
digito -= a;
if(digito < 0)
digito += 10;
return digito;
}
int main(){
unsigned long valor=12345678;
int digito=ObtenerDigito(valor, 3);
digito=CalcularValorDigito(digito,3);
valor=ReemplazarDigito(valor,7,digito);
return 0;
}
¿Podrías explicarme el comportamiento de la función recursiva Exponente? No entiendo su funcionamiento.