Lo suyo sería realizar el procedimiento en dos pasos:
* calcular el residuo
* reubicar los dígitos
La primera opción se puede resolver con un bucle, la segunda hay que hacerla más a mano:
Se puede optimizar, pero yo creo que funciona... no tengo compilador en el teléfono
* calcular el residuo
* reubicar los dígitos
La primera opción se puede resolver con un bucle, la segunda hay que hacerla más a mano:
Código (c) [Seleccionar]
int CifrarNumero( int numero )
{
int digitos[4];
// Paso 1 : transformación
int i;
for ( i = 0; i < 4; i++ )
{
digitos[ 3 - i ] = ( ( numero % 10 ) + 7 ) % 10;
numero /= 10;
}
// Paso 2 : permutación
digitos[ 0 ] ^= digitos[ 2 ]
digitos[ 2 ] ^= digitos[ 0 ];
digitos[ 0 ] ^= digitos[ 2 ];
digitos[ 1 ] ^= digitos[ 3 ];
digitos[ 3 ] ^= digitos[ 1 ];
digitos[ 1 ] ^= digitos[ 3 ];
// Paso 3: Recomponemos el número.
int resultado = 0;
for ( i=0; i < 4; i++ )
{
resultado *= 10;
resultado += digitos[ i ];
}
return resultado;
}
Se puede optimizar, pero yo creo que funciona... no tengo compilador en el teléfono