• Domingo 15 de Diciembre de 2024, 12:33

Autor Tema:  numeros largos 100 digitos  (Leído 1107 veces)

campesinokill

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
numeros largos 100 digitos
« en: Jueves 19 de Agosto de 2010, 10:56 »
0
A ver si me podeir explicar como funciona este programa, por mas que le doy vueltas no consigo comprenderlo ....  este realiza suma de numeros de asta 100 digitos, y puedes imprimirlo por pantalla como entero,tengo conocimientos basicos de c++.

#include <stdio.h>
#include <math.h>
#include <stdlib.h >

#define MAX 10
#define MAX_LONG 99

struct NumeroLargo
{
   int vector[MAX_LONG];
   int cantidad;
};
/////////////////////////////////////
void Crear (struct NumeroLargo nlargo[], int ind, int lg)
{
   int i;
   nlargo[ind].cantidad=lg;
   for (i=0; i<lg-1 ; i++)
   {
      nlargo[ind].vector= rand()%10;
   }
   nlargo[ind].vector[lg-1]= rand()%9 + 1; //exijo que el ultimo digito sea diferente de 0

}
/////////////////////////////////////////////
void Borrar (struct NumeroLargo nlargo[], int ind)
{
   nlargo[ind].cantidad=0;
}
/////////////////////////////////////////////
void Imprimir (struct NumeroLargo nlargo[], int ind)
{
   int i, j ;
   for(j=0; j<ind ;j++ )
   {
      printf ("nNumero %d es: ", j);
   
      for (i=nlargo[j].cantidad-1; i>=0 ; i--)
      {
         printf ("%1d", nlargo[j].vector);
      }
   }
}


void ImprimirInt(struct NumeroLargo nlargo[],int ind1){
   struct NumeroLargo numerito=nlargo[ind1];
   int a=0;
   int b=0;
   int i,j;
   
   for(i=0;i<numerito.cantidad;i++){
      a=numerito.vector;
      for(j=0;i>j;j++){
         a=a*10;
      }
      b=b+a;   
   }
   
   printf("El numero en entero es: %d",b);   
}


void Sumar (struct NumeroLargo nlargo[], int ind1, int ind2, int ind3){
   struct NumeroLargo numero1=nlargo[ind1];
   struct NumeroLargo numero2=nlargo[ind2];
   struct NumeroLargo resultado;

   int a=0;   
   int i,j;
   int acarreo=0;
   
   if (nlargo[ind1].cantidad==nlargo[ind2].cantidad){
      
      for(i=0;i<numero1.cantidad;i++){
         j=numero1.vector+numero2.vector;
         if(acarreo==1){
            acarreo=0;
            j++;}
            
         if(j<10){
            resultado.vector=j;}   
         else{
            acarreo=1;
            a=j-10;   
            resultado.vector=a;   }         
      }
               
   }
   else{
   printf("a No puedo sumar estos numeros");}
}
/////////////////////////////////////////////
int menu() {
   int op = 0;
   
   printf("nnMENU PRINCIPAL:nn");

   printf("t1.- Crear Numero Largo (almacenado al reves) n");
   printf("t2.- Borrar Numero Largo n");
   printf("t3.- Imprimir una Lista de  Numeros Largosn");
   printf("t4.- Imprimirlo como un Entero  n");
   printf("t5.- Sumar dos Numeros Largos n");
   printf("tCUALQUIER NUMERO NEGATIVO.- Salir n");
   printf("nELIJA UNA OPCION:");
      
   scanf("%d", &op);
   getchar();
   return op;
}
//////////////////////////////////////////

int main(int argc, char *argv[])
{
   int i,j;
   int indice1, indice2,indice3, longitud;
   int op;

   struct NumeroLargo numeros[MAX];

// inicialmente borra todos los numeros
   for (i=0; i<MAX; i++)
      {
         Borrar(numeros, i);
      }
   
   op = menu();
   
   while (op >=0 )
   {
      if (op==1)
      {
         printf ("Dame indice:");
         scanf ("%d", &indice1);
         printf ("Dame longitug:");
         scanf ("%d", &longitud);
         
         if (indice1<0 || indice1 >=MAX || longitud <0 || longitud >MAX_LONG)
            printf ("Indice o longitud negativos o mayor que el maximo permitidon");
         else Crear(numeros, indice1, longitud);
      }
      else if (op==2)
      {
         printf ("Dame indice:");
         scanf ("%d", &indice1);
         if (indice1<0 || indice1 >=MAX) printf ("Indice negativos o mayor que el maximo permitidon");
         else    Borrar(numeros, indice1);
      }
      else if (op==3)
      {
         printf ("Dame indice:");
         scanf ("%d", &indice1);
         if (indice1<0 || indice1 >=MAX) printf ("Indice negativos o mayor que el maximo permitidon");
         else    Imprimir(numeros, indice1);
      }
      else if (op==4)
      {
         printf ("Dame indice:");
         scanf ("%d", &indice1);
         if (indice1<0 || indice1 >=MAX)
            {printf ("Indice negativos o mayor que el maximo permitidon");}
         else {ImprimirInt(numeros, indice1);}
      }   
      else if (op==5)
      {
         printf ("Dame indice 1:");
         scanf ("%d", &indice1);
         
         if (indice1<0 || indice1 >=MAX)
            {printf ("Indice negativos o mayor que el maximo permitidon");}
         else {
            printf("introduce indice 2:");
            scanf("%d",&indice2);
            if (indice2<0 || indice2 >=MAX)
               {printf ("Indice negativos o mayor que el maximo permitidon");}
             else{
               printf("¿Donde vas a guardar la suma?:");
                scanf("%d",&indice3);
               Sumar(numeros,indice1,indice2,indice3);}
         }
      }
                        
      op = menu();
   }

   return 0;
}