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. Ehh tio, pero que chapuza! por que hablas como si fueras español? xD

      salu2

      Usando Firefox 3.0.8 Firefox 3.0.8 en Ubuntu 8.10 Ubuntu 8.10
    2. Actualmente, traté de hacer un artículo acerca de la suma y las demás operaciones de números muy grandes en cualquier base en detalle, pero no logro continuar sin tener que explicar teoria de Algebra Lineal. En algun momento llegaré a alguna forma.

      Un consejo, en “algorithm” se encuentra reverse(), lo cual realiza lo mismo de invertirCadena. No creo que exista algoritmo mas eficiente, no obstante el manejo de memoria con la clase string no es agradable (tengo el mismo problema en mi artículo similar, tampoco era mi objetivo de todas formas), vale mas la pena calcularlo previamente. Una idea, la cantidad de dígitos siempre será igual al tamaño del mayor número o este más 1.

      En cualquier caso, buen artículo. Saludos.

      Usando Opera 9.62 Opera 9.62 en Windows XP Windows XP

    Menciones/Notificaciones

    1. best whey protein for women yahoo - some research. this means that, as a... writer, you have gone beyond looking on a search engine to find facts, and ...
    2. plus size clothing websites - that knowledge to your blog. blog content... can be easy and fun. when you have a blog and you want to ...

    Dejar una respuesta

    Debes ser Alojarse para enviar un comentario.