Ver Mensaje Individual
  #3 (permalink)  
Antiguo 08/11/2016, 18:23
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Modificar un digito de un numero

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
  1. #include  <stdio.h>
  2.  
  3. unsigned long Exponente(int e)
  4. {
  5.     return (e>0)? 10*Exponente(e-1) : 1;
  6. }
  7.  
  8. int ObtenerDigito(unsigned long valor, unsigned indice)
  9. {
  10.     valor %= Exponente(indice+1);
  11.     valor  /= Exponente(indice);
  12.  
  13.     return valor;
  14. }
  15.  
  16. unsigned long ReemplazarDigito(unsigned long valor, unsigned indice, unsigned nuevoDigito)
  17. {
  18.   unsigned long superior = valor / Exponente(indice+1);
  19.   unsigned long inferior = valor % Exponente(indice);
  20.  
  21.   return (superior*10+nuevoDigito)*Exponente(indice) + inferior;
  22. }
  23.  
  24. int CalcularValorDigito(int digito,int a){
  25.     digito -= a;
  26.     if(digito < 0)
  27.         digito += 10;
  28.     return digito;
  29. }
  30.  
  31. int main(){
  32.     unsigned long valor=12345678;
  33.     int digito=ObtenerDigito(valor, 3);
  34.     digito=CalcularValorDigito(digito,3);
  35.     valor=ReemplazarDigito(valor,7,digito);
  36.     printf("%lu",valor);
  37.     return 0;
  38. }
¿Podrías explicarme el comportamiento de la función recursiva Exponente? No entiendo su funcionamiento.

Última edición por aguml; 08/11/2016 a las 19:27