/* Ejemplo de implementación de números enteros * muy grandes con cadenas de caracteres */ // Enteros de hasta 99 digitos #include typedef char MegaInt[100]; void Suma ( MegaInt A, MegaInt B, MegaInt R ) { int i,j,k; int acarreo,suma; i =j = k = 0; acarreo = 0; while ( (A[i] != '\0') && (B[j] != '\0') ) { suma = (A[i]-'0') + (B[j]-'0') + acarreo; if ( suma >= 10 ) { R[k] = suma - 10 + '0'; acarreo = 1; } else { R[k] = suma + '0'; acarreo = 0; } j++; i++; k++; } while ( A[i] != '\0') { suma = (A[i]-'0') + acarreo; if ( suma >= 10 ) { R[k] = suma - 10 + '0'; acarreo = 1; } else { R[k] = suma + '0'; acarreo = 0; } i++; k++; } while ( B[j] != '\0') { suma = (B[j]-'0') + acarreo; if ( suma >= 10 ) { R[k] = suma - 10 + '0'; acarreo = 1; } else { R[k] = suma + '0'; acarreo = 0; } k++; j++; } if ( acarreo ) { R[k] = '1';k++; } R[k] = '\0'; } void Invertir( char *cadena ) { int i,tam; char aux; tam = strlen(cadena); for (i=0;i < tam/2; i++ ) { aux = cadena[i]; cadena[i] = cadena[ tam -i -1]; cadena[ tam -i -1] = aux; } } void LeerMegaInt (MegaInt I) { char *X; fgets(I,100,stdin); X = I; // Sustituyo el \n por \0 while ( *X != '\0' && *X != '\n') X++; if ( *X == '\n' ) *X = '\0'; Invertir(I); } void MostrarMegaInt ( MegaInt I) { Invertir(I); printf("\n%30s",I); Invertir(I); } main () { MegaInt A,B,C; while (1) { puts("\n------------------------------"); printf("Primer valor:");LeerMegaInt(A); printf("Segundo valor:");LeerMegaInt(B); Suma(A,B,C); printf("Resultado:"); MostrarMegaInt(A); MostrarMegaInt(B); MostrarMegaInt(C); } }