Así que estoy haciendo un juego, donde tienes que calcular el siguiente número en la secuencia de fibonnaci. en un temporizador
Ex. 0, 1 => next number = 1 1, 2 => next number = 3 2, 3 => next number = 5Y así...
La cosa es... una vez que llegas a números más grandes, que son más difíciles de calcular, querrás hacer sumas básicas, de derecha a izquierda. Así que tienes 2 opciones, o lo haces en tu mente, o lo escribes e inviertes el número después, que es exactamente para lo que lo he codificado.
Está invirtiendo el número, usando el algoritmo normal para ello, pero hay un problema.
Normalmente, vas de derecha a izquierda con las matemáticas y escribes cada dígito hacia abajo, y una vez que llegas a sumar los últimos dígitos de los 2 números, si la suma de estos 2 supera 10, simplemente escribes el número antes del otro. dígitos
Ex:567 + 723
1. 7 + 3 => 0 Number = 0 2. 6 + 2 = 8 + the carried 1 = 9 Number = 90 3. 5 + 7 = 12 Number = 1290En la barra de entrada, lo escribiría como 0912 , pero eso no funcionaría ya que el 12 también debe invertirse en 21 . Como no quiero que esto sea una molestia para el jugador, la pregunta es
¿Cómo invierto los primeros dígitos 2 dígitos de un número?
Mi suposición sería agregar 1 variable que almacene la suma inversa de los números, y luego otras 2 variables que almacenen el número después de los primeros 2 dígitos en una, y la otra que almacene los primeros 2 dígitos y los invierta, luego agregue los primeros 2 dígitos invertidos a la otra parte multiplicada por 100
Aun así, no creo que sea mi mejor opción, ya que no sé si los números son de 3 dígitos con suma >999 o normales de 4 dígitos con suma <9999
Si tienes alguna idea mejor, por favor dímelo. Si tiene alguna pregunta sobre mi código, con gusto lo publicaré Mis disculpas si esto es difícil de entender, la mente humana es difícil de explicar.
Una forma relativamente simple es esta (véalo en vivo aquí ):
public static long SwapFirstTwoDigits(long val) { if(val < 10) return val; long mask; for(mask = 1; mask < val; mask *= 10) {} mask /= 100; // two back var firstTwoDigits = val / mask; return val % mask + (firstTwoDigits % 10) * mask * 10 + firstTwoDigits / 10 * mask; }Básicamente, construye la máscara de base 10 de todos los dígitos que desea dejar solos (por lo tanto, dos detrás de los dos primeros dígitos de la derecha) y simplemente intercambia el resto con aritmética de módulo.
Salida del violín vinculado:
Input: 1530, Output: 5130 Input: 16789, Output: 61789 Input: 34, Output: 43 Input: 3, Output: 3 Input: 0, Output: 0