Preguntas del examen de programación Vc
# define is _ print _ factor 1//Define si se imprime el resultado intermedio.
Descomposición de categorías
{
Privado:
unsigned_ _ int64 * num
Unsigned_ _ int64 * suma
int n;
Público:
Descomponer();
Descomponer(int n, unsigned _ _ int 64 * num );
Virtual ~ descomposición ();
int primenu(unsigned _ _ int 64 x, unsigned _ _ int 64 * fac
void primenu); ();
void printSum();
};
El siguiente es el archivo cpp
////// /////////////////////////////////////////////////// //// /////////////////////////////
// Decompose.cpp: Implementación del descompuesto clase.
//
/////////////////////////////////// // /////////////////////////////////////////////// p>
#Contiene "decomposition.h"
#Incluye "stdio.h"
#Incluye "windows.h"
/// //////////// /////////////////////////////////////// //////////////// /////
//Construcción/Destrucción
////////// ///////////////// ///////////////////////////////// /////////////
Descomponer::descomponer()
{
num = NULL
suma = NULL
n = 0;
}
Descomponer: :decompose(int n, unsigned __int64 *num)
{
Esto - gt; n = n
Esto - gt; num = nuevo sin firmar _ _ int 64[n]
suma = nuevo sin firmar _ _ int 64[n];
for(int I = 0;iltn;i)
Esto - gt;Número[I]=Número[I];
}
Descomposición::~descomposición()
{
Si (num!=null)
Eliminar [] número;
Si (suma!=null)
p>
Eliminar []suma;
}
Sin firmar __int64 sqrt64 (unsigned __int64 x)
{
int I =(sizeof(unsigned _ _ int 64) lt; lt3)-1
if(x) ==(unsigned __int64)1)
return(unsigned __ int 64)1;
mientras(I gt;=0)
{ p>
si ((x gt gti)==1)
romper;
I-;
}
return(unsigned _ _ int 64)1 lt((I 2) gt; gt1);
}
int Decompose::primenu(unsigned _ _ int 64 x, unsigned __int64 *fac)
{
unsigned __int64 i=2, sqrtx = sqrt 64(x);
int flen = 0;
while(iltsqrtx)
{
if(x I = = 0)//Si I es un factor de x
{
fac[flen]= I;
x /= I;
sqrtx = sqrt 64(x);
}
else if(I = = 2)i;
else I = 2; //Si x no es un número par, entonces el factor de x debe ser un número impar
}
fac[flen
]= x;
Devuelve flen// flen es el número de enteros en fac
}
descomposición nula: primeNum()
{
unsigned _ _ int 64 fac[64];
int i, j, flen
for(I = 0; i ltn; i )
{
flen=primeNum(num[i], fac);
#Si es _print_factor
printf ("I64u = ",num[I]);
for(j = 0;j ltflenj)
{
printf("I64u ",fac [j] );
if (j!=flen-1)
printf(" x ");
si no printf(" \ n ") ; p>
}
#endif
for(j=0, suma[I]= 0; j ltflenj )
suma[ I] = fac[j];
}
}
descomposición vacía:: printSum()
{
int I;
for(I = 0;iltn;i)
printf("suma(I64u)=I64u\n ",num[i],suma [I]) ;
}
void main()
{
LARGE_INTEGER t1, t2, frq
unsigned _ _ int 64 num[]= { 1234, 123456789, 1234567891011, 123456789165438
int i, n = sizeof(num)/sizeof(* num);
Descomposición d(n, num);
QueryPerformanceFrequency(amp;frq);
QueryPerformanceCounter(amp;t 1);
d.prime num();
QueryPerformanceCounter(&T2);
printf("\n");
d.printsum();
printf ("\ntime=f segundos\n ", (doble)(t2. Cuatro partes-t1. QuadPart)/frqquad parte);
}