Red de conocimiento informático - Descarga de software - Utilice c lista enlazada individualmente para escribir el factorial de números grandes

Utilice c lista enlazada individualmente para escribir el factorial de números grandes

# include ltiostream gt

# include ltstdio.h gtusing namespace std

Nodo de cadena de clases

{

Cadena de clases amigas;

p>

Privado:

int data;

ChainNode * link

};

Cadena de categorías

{

Público:

cadena(){ primero = 0;}

~ Cadena();

bool Está vacío ( )const { return first == 0;}

int Longitud() constante;

Búsqueda booleana (int k, int ampx);

Búsqueda internacional ( Componente ampx) constante;

Chain ampChange(int k, int x);

Chain ampDelete(int k, int ampx);

Chain ampInsert( int k, constint ampx);

salida nula uno (nodo de cadena constante * actual);

salida nula();

Privado:

ChainNode * primero

};

Chain::~Chain()

{

ChainNode * siguiente

mientras(primera vez)

{

siguiente = primer-gt;

Eliminar primero

primero= siguiente;

}

}

int Cadena::Longitud() constante

{

ChainNode * actual = primero

int len ​​​​= 0;

mientras(actual)

{

len;

len p>

Actual = actual - gt link;

}

Devuelve len

}

Cadena booleana ::Buscar (int k, int ampx)

{

ChainNode * actual = primero

int índice = 0;

mientras (índice lt ; k amp amp corriente)

{

Actual = corriente - gt enlace

index ;

}

if (actual)

{

x = actual - gt; datos;

returntrue

}

Devuelve falso;

}

int Cadena:: Búsqueda(consint amp; x) constante

{

ChainNode * actual = primero

int index = 1;

y (actual amp actual -> datos! = x)

{

Actual = actual - gt; enlace; if(actual)

índice de retorno;

r

eturn0

}

/*Cambiar a recursividad, de modo que primero se pueda generar el orden superior y luego el orden inferior*/Voidchain:: Genera un (nodo de cadena constante * actual).

{

if(actual)

{

OutputOne(actual - gt; enlace);

if (current - gt; link)

printf ("03d ", current - gt; data /*debe generar 3 dígitos*/ de lo contrario

printf("d " , actual - gt; datos); /*No se puede usar 03d*/

}

}

cadena vacía::Salida()

{

salida uno(this- gt; primero);

cout lt ltendl

}

Chain ampChain:: Cambiar( int k, int x)

{

ChainNode * p = primero

for(int index = 0; index ltk amp ampp; index )

p = p- gt; enlace

if (p)

p->; datos = x

return * this

}

Chain ampChain::Delete(int k, int ampx)

{

ChainNode * p = primero

If (k ==0)

primero = primero- gt; enlace;

Otro

{

ChainNode * q = primero

for(int index = 0; index ltk-1 and ampq; index)

q = q- gt link;

p = q - gt; enlace;

q->; enlace = p-gt;

}

x = p-gt; >

Eliminar p;

Devolver * esto

}

Cadena ampChain::Insert(int k, constint ampx)

{

ChainNode * p = primero

for(int index = 0; index ltk-1 and ampp; index)//for(int index = 0; index ltk amp ampp ; índice )p = p- gt; enlace;

ChainNode * y = nuevo nodo de cadena

y- gt; k)

{

y- gt; enlace = p- gt;

p->; >}

Otro

{

primero = y;

y-gt; >}

Devolver * this

}

int main(int argc, char* argv[])

{

Cadena c;

int n, I, j, k, l(0);

c. 0, 2);

cout lt ltPor favor, introduzca un número:;

CIN gtn;

<

p>for(I = 1; i lt= n; i)

{

int j _ end = c . Primero multiplica */for(j = 0; j ltj _ endj )

{

c.Find(j, k);

k = i * k

c.Change(j,k);

}

/*Entonces llevar*/for(j = 0; j ltj _ endj)

{

c.Find(j,k);

if(k gt;=1000)

{

if(j lt; j_end -1)

c.Find(j 1, l);

Otro

{

c. Insert (j 1, 0); /*Agregar bit alto*/

l = 0

}

l = k/1000; ;

c.Cambio(j 1, l);

k = k 1000

c.Cambio(j, k

);

}

}

}

c.output();

return0

}