[ create a new paste ] login | about

Link: http://codepad.org/nNsXsB61    [ raw code | output | fork ]

salvador@conclase.net - C++, pasted on Oct 20:
// Sumar números enteros sin signo almacenados en cadenas
// Agosto de 2009 Con Clase, Salvador Pozo
#include <iostream>

using namespace std;

const unsigned int cadmax = 32;
typedef char numero[cadmax];

bool Sumar(numero, numero, numero);
int max(int, int);

int main()
{
    numero n1="999999999999999999";
    numero n2="1";
    numero suma;

    Sumar(n1, n2, suma);
    cout << n1 << " + " << n2 << " = " << suma << endl;
    return 0;
}

bool Sumar(numero n1, numero n2, numero r) {
    // Primero, buscar los dígitos de la derecha:
    char c1,c2;
    int acarreo = 0;
    int lon1=strlen(n1);
    int lon2=strlen(n2);
	// Colocar el terminador de la cadena resultado:
    r[max(lon1, lon2)] = 0;
    // Hacer la suma, digito a digito:
	do {
        lon1--;
        lon2--;
        if(lon1 < 0) c1 = '0'; else c1 = n1[lon1];
        if(lon2 < 0) c2 = '0'; else c2 = n2[lon2];
        r[max(lon1, lon2)] = acarreo+c1+c2-'0';
        if(r[max(lon1, lon2)] > '9') { r[max(lon1, lon2)]-=10; acarreo=1; }
        else acarreo = 0;
    } while(lon1 > 0 || lon2 > 0);

    // Desbordamiento:
    if(acarreo) {
        if(strlen(r) < cadmax) {
            for(int i=strlen(r)+1; i > 0; i--) r[i] = r[i-1];
            r[0] = '1';
            return false;
        }
    }
    return true;
}

int max(int a, int b) {
    if(a > b) return a;
    return b;
}


Output:
1
999999999999999999 + 1 = 1000000000000000000


Create a new paste based on this one


Comments: