Implementacion de multiplicacion ultizando arreglos

Esta implementacion surgio de la necesidad de implementar una solucion para la multiplicacion de numeros grandes, me refiero a numeros que su resultado causaran el desboramiento de bufer. Mi propuesta se baso en la utilizacion de cadenas para su representacion y manejo de datos, pienso que la solucion que encontre es relativamente buena y quizas tenga muchos puntos a mejorar, lo cual se aceptan sugerencias.

Quiza una de las mayores limitantes que tengo es que el tipo de valor para el indice de los arreglos solo puede ser entero, esto reduce la cantidad de digitos con los cuales puedo trabajar.

Multiplicacion.java

...
	private static String multiplicar(String a, String b) {
		//Validaciones
...		
		StringBuffer result = new StringBuffer();
		int x = a.length();
		int y = b.length();
		int i;
		int j;
		long[][] results = new long[x][y];
		List sum = new LinkedList();
		long tmp;

		for (i = 0; i < x; i++) {
			for (j = 0; j < y; j++) {
				results[i][j] = (a.charAt(i) - '0') * (b.charAt(j) - '0');
			}
		}

		x--;
		y--;
		tmp = 0;

		while (true) {
			j = y;
			i = x;
			while (j >= 0 && i < a.length()) {
				tmp += results[i][j];
				i++;
				j--;
			}
			sum.add(tmp % 10);
			tmp /= 10;

			if (x > 0) {
				x--;
			} else if (y > 0) {
				y--;
			} else {
				if(tmp > 0){
					sum.add(tmp);
				}
				break;
			}
		}
		Collections.reverse(sum);
		for (long l : sum) {
			result.append(l);
		}

		return result.toString();
	}

Leave a Reply