Domingo 15 de Diciembre de 2024, 12:33
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
numeros largos 100 digitos
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: numeros largos 100 digitos (Leído 1107 veces)
campesinokill
Nuevo Miembro
Mensajes: 1
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;
}
Tweet
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
numeros largos 100 digitos