abr 17, 2009

Enviado por en C/C++, Programacion

Sumar numeros muy grandes c++

Buenas.
Resolviendo un pequeño problema me encontre con que debía sumar numeros gigantes que no cabían en ningún tipo de dato disponible en c++ asi que pues hice esta pequeña implementacion, supongo que deben existir formas mas cortas de hacerlo, mas eficientes, y que lo hagan de forma mas óptima asi como existe le algoritmo de Karatsuba para la multiplicación pero vale acotar que es solo una chapuza.

Suerte que existen clases ya hechas para numeros grandes en c++, esta a recomendacion de Llyn la cual es BigInt luego habrá tiempo de hablar de ella.
Sin mas largas al asunto dejo el codigo solo de la funcion, el archivo completo esta AQUI

string sumarCadena(string str1, string str2)
{
	int llevo = 0, parcial;

	string res = "";

	stringstream ultimo;

	if(str1.length() > str2.length())
		str2 = completar(str2, str1.length() - str2.length());

	else
		if(str1.length() < str2.length())
			str1 = completar(str1, str2.length() - str1.length());

	for(int i = str1.length() - 1; i >= 0; i--)
	{
		parcial = charToInt(str1[i]) + charToInt(str2[i]) + llevo;

		if(parcial > 0x9 && i != 0x0)
		{
			parcial -= 10;
			llevo = 1;
		}
		else
			llevo = 0;

		if(i == 0x0 && parcial > 0x9)
		{
			ultimo << parcial;
			res += invertirCadena(ultimo.str());
		}
		else
			res += intToChar(parcial);
	}

	return invertirCadena(res);
}

saludos

    Posts Relacionados

    1. ahora que tenemos mas contenido, la seccion de posts relacionados cobra vida :o

      saludos a todos y esperando con ansias mas entradas de este tema (me encantaria ver la version de Llyn)

      Usando Firefox 3.0.7 Firefox 3.0.7 en PCLinuxOS 2007 PCLinuxOS 2007
    2. la verdad que lo de reverse si me imagine que existía pero he mirado muy poco, por no decir nada, la stl de c++, jeje y si la gestión de memoria es patetetica, pero no quería trabajar con chars a pelo y ponerme a luchar contra los punteros porque se que voy a perder y pues la idea era hacer algo rapidito jeje.. si lo de los numeros tienes razón por eso completo con ceros el menor (si lo hay) para que queden del tamaño del mayor, es eso a lo que te refieres?

      estamos hablando
      saludos

      P.D. B@cho ya quiere hacer su mini coliseo de codigo :p

      Usando Firefox 3.0.4 Firefox 3.0.4 en GNU/Linux GNU/Linux

    Dejar una respuesta

    Debes ser Alojarse para enviar un comentario.