Java - BigInteger en bucle for

 
Vista:
sin imagen de perfil
Val: 35
Ha disminuido su posición en 10 puestos en Java (en relación al último mes)
Gráfica de Java

BigInteger en bucle for

Publicado por Cecilia (10 intervenciones) el 29/03/2020 20:16:26
Saludos, estoy haciendo un código que a partir de cuatro variables, utilizando x,y,z,o, con una sustitución simple, donde el programa imprime inicialmente 1, 2, 3, y el siguiente número debe ser la suma de los tres primero, osea que sigue 6, luego 11 y así.

En el bucle por cada pase, x = y, y = z, z = o, donde O = x + y + z

Cada número tiene un puesto, el primer puesto imprime 1, el segundo imprime 2, el tercero 3, el cuarto 6, el quinto 11, y así.

Yo lo simplifiqué para que solamente imprima el puesto deseado, en vez de imprimir todo, solo imprimo el puesto 30, y veo qué valor tiene z en el puesto 30.

El tema es que quiero llegar hasta el puesto número 3030303030303030 y el código que utilizo me indica en los compiladores que nunca llega al ser demasiado largo, si debe haber una manera más corta de solucionarlo, espero que me puedan ayudar.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.math.BigInteger;
 
public class BigIntegerClass {
    public static void main(String args[]) {
     BigInteger x = new BigInteger("1");
     BigInteger y = new BigInteger("2");
     BigInteger z = new BigInteger("3");
     BigInteger o = new BigInteger("0");
     BigInteger q = new BigInteger("3030303030303030");
 
 //System.out.println("Puesto 1: " +x);
 //System.out.println("Puesto 2: " +y);
 //System.out.println("Puesto 3: " +z);
for (BigInteger i = new  BigInteger("4"); i.compareTo(q)<=0 ; i = i.add(BigInteger.valueOf(1))){
    o = x.add(y.add(z));
    x = y;
    y = z;
    z = o;
    System.out.println("Puesto " + i + ": " + z);
 
  }
 }
}


Utilizo compiladores con Java, no Junit.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 35
Ha disminuido su posición en 10 puestos en Java (en relación al último mes)
Gráfica de Java

BigInteger en bucle for

Publicado por Cecilia (10 intervenciones) el 29/03/2020 20:55:47
Saludos,

Me gustaría saber los últimos 5 dígitos de z.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 35
Ha disminuido su posición en 10 puestos en Java (en relación al último mes)
Gráfica de Java

BigInteger en bucle for

Publicado por Cecilia (10 intervenciones) el 29/03/2020 21:24:28
Saludos, lo que quiero es saber los últimos 5 dígitos, le hice modificaciones al for para saber estos, aunque el compilador sigue mostrando que es demasiado grande.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (BigInteger i = new  BigInteger("4"); i.compareTo(q)==0 ; i = i.add(BigInteger.valueOf(1))){
    o = x.add(y.add(z));
    x = y;
    y = z;
    z = o;
    int zIntValue = z.intValue();
    int ultimoDigito = z.intValue()%10;
    int ultimoDigito2 = (zIntValue/10)%10;
    int ultimoDigito3 = (zIntValue/100)%10;
    int ultimoDigito4 = (zIntValue/1000)%10;
    int ultimoDigito5 = (zIntValue/10000)%10;
    System.out.println("Puesto " + i + ": " + ultimoDigito5+Digito4+ultimoDigito3+ultimoDigito2+ultimoDigito);
 
  }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 973
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

BigInteger en bucle for

Publicado por Agustin (170 intervenciones) el 29/03/2020 21:45:06
1
o = x.add(y.add(z));

jajajajajajajaja.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-4
Comentar
sin imagen de perfil
Val: 35
Ha disminuido su posición en 10 puestos en Java (en relación al último mes)
Gráfica de Java

BigInteger en bucle for

Publicado por Cecilia (10 intervenciones) el 29/03/2020 22:21:13
Saludos, volví a corregir el código y esta vez llego a un resultado.

Lo comprobé averiguando que si en el puesto 4 el resultado de z era 6 y en el quinto 11, yo sé que z = z*m-1, y al mismo tiempo multiplico i por m para averiguar el puesto exacto. Averigüé cuántas veces entraba 30, el valor de i, en un número de valores altos.

El valor de z con respecto a i multiplicado por m, es z por m -1.

Aún tengo dudas sobre el código

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
 * BigIntegerVariables class of the Java program.
 */
import java.math.BigInteger;
 
public class BigIntegerVariables {
    public static void main(String args[]) {
     BigInteger x = new BigInteger("1");
     BigInteger y = new BigInteger("2");
     BigInteger z = new BigInteger("3");
     BigInteger o = new BigInteger("0");
     BigInteger q = new BigInteger("30");
     BigInteger m = new BigInteger("67340067340067");
 
 
 //System.out.println("Puesto 1: " +x);
 //System.out.println("Puesto 2: " +y);
 //System.out.println("Puesto 3: " +z);
for (BigInteger i = new  BigInteger("4"); i.compareTo(q)<=0 ; i = i.add(BigInteger.valueOf(1))){
    o = x.add(y.add(z));
    x = y;
    y = z;
    z = o;
    int zIntValue = z.intValue()*m.intValue()-1;
    int ultimoDigito = z.intValue()%10;
    int ultimoDigito2 = (zIntValue/10)%10;
    int ultimoDigito3 = (zIntValue/100)%10;
    int ultimoDigito4 = (zIntValue/1000)%10;
 
    if (i.compareTo(q)==0){
        System.out.println("Puesto " + i.multiply(m) + ": " + ultimoDigito4+ultimoDigito3+ultimoDigito2+ultimoDigito);
    }
 
  }
 }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

BigInteger en bucle for

Publicado por Rodrigo (623 intervenciones) el 29/03/2020 22:44:19
Si solo te interesa saber los 5 ultimos digitos del resultado, no necesitas hacer la suma exacta, y tal vez tampoco requieres usar BigInteger.

Si los numeros fueras gigantezcos, digamos

a = xxxxx12345
b = yyyyy67890

con xxxxx e yyyyyy alguna secuencia de digitos, no importa el valor de xxxxx o yyyyy, pues al final solo vas a requerir el resultado de los 5 ultimos digitos de a y b para calcular los ultimos 5 digitos de la suma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 35
Ha disminuido su posición en 10 puestos en Java (en relación al último mes)
Gráfica de Java

BigInteger en bucle for

Publicado por Cecilia (10 intervenciones) el 30/03/2020 07:59:04
Saludos,

Bien, lo voy a hacer, muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar