some image

Codes and Tags

Generando Fibonacci con BigInteger y Suma Digital

Etiquetas: , Blog, Programación No comments

* La serie de fibonacci corresponde a los numeros generados apartir de la adicion de los 2 terminos anteriores, de acuerdo a esto los primeros numeros de fibonacci serian : 1,1,2,3,5,8,13,21,..

* Una suma digital es la representacion de tomar cada uno de los digitos dados en un numero y sumarlos. Ejemplo : la Suma digital de 724 seria igual a 7+2+4 = 13

Bien, de acuerdo a los 2 enunciados anteriores el siguiente codigo pretende mostrar cual es el termino de fibonnaci, que al obtener una suma digital de dicho numero, supere el valor de 100. (Es decir sumando cada digito del numero sea mayor a 100).

import java.math.BigInteger;

/**
 * 
 * La serie de fibonacci corresponde a los numeros generados apartir de la
 * adicion de los 2 terminos anteriores, de acuerdo a esto los primeros numeros
 * de fibonacci serian : 1,1,2,3,5,8,13,21,..
 * 
 * Una suma digital es la representacion de tomar cada uno de los digitos dados
 * en un numero y sumarlos. Ejemplo : la Suma digital de 724 seria igual a :
 * 7+2+4 = 13
 * 
 * @author Codes and Tags
 * 
 */

public class Problem2 {

	public static void main(String[] args) {
		Problem2 solve = new Problem2();
		solve.getFibonnaci(115);
	}

	/**
	 * Obtiene la serie de fibonacci, de la manera mas rudimentaria utilizando
	 * BigInteger apenas para resolver pequenos retos de programacion
	 * 
	 * @param n
	 */
	public void getFibonnaci(int n) {
		// Tiempo inicial del sistema en milisegundos
		long startTime = System.currentTimeMillis();
		// Variables para manejar la serie
		BigInteger a = BigInteger.ONE, b = BigInteger.ONE;
		// Contador para evitar pasarse de calidad 
		int count = 0;

		while (count < n) {
			a = a.add(b);
			b = a.subtract(b);

			if (getDigitalSum(a.toString()) > n) {
				System.out.println("El numero " + a
						+ " genera una suma digital de "
						+ getDigitalSum(a.toString()));
				break;
			}
			count++;
		}
		// Se muestra el tiempo invertido
		long endTime = System.currentTimeMillis();		
		System.out.println("Tiempo ms : " + (endTime - startTime));
	}

	/**
	 * Obtiene la suma digital de un numero dado
	 * 
	 * @param number
	 * @return
	 */
	public int getDigitalSum(String number) {
		System.out.println("number : " + number);
		int sum = 0;
		for (int i = 0; i < number.length(); i++) {
			sum += Integer.parseInt("" + number.charAt(i));
		}
		return sum;
	}

}

La salida del programa seria como esta :

number : 12200160415121876738
number : 19740274219868223167
number : 31940434634990099905
number : 51680708854858323072
number : 83621143489848422977
number : 135301852344706746049
number : 218922995834555169026
number : 354224848179261915075
number : 573147844013817084101
number : 927372692193078999176
number : 927372692193078999176
El numero 927372692193078999176 genera una suma digital de 116
Tiempo ms : 12

About Edwin Torres

Related Posts

  • Logo Java
  • Logo Java
  • Logo Java
  • Logo Java

Add your comment