Utilice c lista enlazada individualmente para escribir el factorial de números grandes
# 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 ; p>
}
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
}