Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/11/2016, 17:26
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Modificar un digito de un numero

Tirando de C++11 puedes probar algo así (por favor, abandona la versión de Borland del siglo pasado ):

Función para calcular un exponente. El modificador constexpr permite que el compilador pueda conocer el resultado en tiempo de compilación (y usar dicho valor en vez de llamar a la función).
Código C++:
Ver original
  1. constexpr unsigned long Exponente(int e)
  2. {
  3.   return (e>0)? 10*Exponente(e-1) : 1;
  4. }

Template para reelmplazar el dígito:
Código C++:
Ver original
  1. template<int D> unsigned long Reemplazar(unsigned long valor, unsigned nuevoDigito)
  2. {
  3.   unsigned long superior = valor / Exponente(D+1);
  4.   unsigned long inferior = valor % Exponente(D);
  5.  
  6.   return (superior*10+nuevoDigito)*Exponente(D) + inferior;
  7. }

Y el uso:
Código C++:
Ver original
  1. int main()
  2. {
  3.   std::cout << Reemplazar<2>(123456,8) << '\n'; //123856
  4.   std::cout << Reemplazar<5>(111111,5) << '\n'; //511111
  5. }

Aunque también se puede hacer sin template:

Código C++:
Ver original
  1. unsigned long Reemplazar(unsigned long valor, unsigned indice, unsigned nuevoDigito)
  2. {
  3.   unsigned long superior = valor / Exponente(indice+1);
  4.   unsigned long inferior = valor % Exponente(indice);
  5.  
  6.   return (superior*10+nuevoDigito)*Exponente(indice) + inferior;
  7. }

La diferencia básica es que al usar el template hay cálculos que se realizarán en tiempo de compilación... reduciendo el tiempo necesario para ejecutar la función.

Por otro lado, la lógica binaria no te sirve porque los números se almacenan en base 2 y cada dígito de la numeración base10 afecta a varios dígitos de la base 2... no hay operación binaria posible.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.