00001 // Numeral.cpp (c) 2005 [email protected] 00002 00003 /** \file Numeral.cpp 00004 \brief Programa recursivo que obtiene los factores de un numero. 00005 00006 \author Modificaciones por Cristopher Rojas Salas <[email protected]> 00007 \author Adolfo Di Mare <[email protected]> 00008 \date 2006 00009 */ 00010 00011 /* 00012 Este programa usa el metodo recursivo numeral el cual recibe un entero largo para buscar 00013 sus divisores (factores del numero ej: 2*2*2=8) y mostrarlos en pantalla. Numeral utiliza un ciclo while para buscar el 00014 primer divisor exacto del n actual y continua. El programa continua buscando divisores 00015 dividiendo el n actual por su divisor exacto para la siguiente busqueda 00016 */ 00017 00018 00019 #include <iostream> 00020 #include "ADH_port.h" // Biblioteca de compatibilidad BC++ v3.1 && MS C++ 00021 00022 using namespace std; // Usamos el namespace std que agrupa todas la entidades de la libreria standard c++ 00023 00024 /// Metodo recursivo que recibe un entero para obtener sus divisores 00025 void Numeral(long n) { 00026 long i = 1;/// entero largo utilizado como contador inicializado en 1 00027 bool esta = false;/// variable booleana que sirve como bandera en el ciclo de busqueda de divisores 00028 00029 /* ciclo que busca el primer divisor exacto del entero largo n */ 00030 while ( (!esta) && n>2) {//este ciclo busca un divisor exacto 00031 //empezando desde 1 y aumentando uno a uno termina cuando lo encuentra 00032 ++i;//aumenta contador 00033 esta = (n % i == 0);//si el entero entrado es multiplo de i o sea al dividirse se obtiene residuo 0 00034 //entonces el valor devuelto es true de lo contrario es false 00035 } 00036 00037 if(n==2){//condicion para que no excluya al n = 2 en la division 00038 esta = true;//excepcion 00039 i=2;//ponemos el contador en dos para que la proxima entrada sea 00040 //dividida entre dos 00041 } 00042 00043 /* condicion que muestra en pantalla el divisor exacto y continua la busqueda de 00044 mas divisores */ 00045 if (esta) {//si lo encontro 00046 cout << i << endl;//muestra en pantalla el valor de i 00047 Numeral(n / i);//luego vuelve a llamarse a si mismo pero con el valor 00048 // de la division del entero entre el i divisor 00049 } 00050 } 00051 00052 /// metodo principal donde se prueba el metodo Numeral con varios valores 00053 int main() { 00054 int N;//prueba asignando diferentes valores al n 00055 N = 512; cout << "==>" << endl; Numeral(N);// muestra en pantalla "==>" y llama a Numeral con el valor N 00056 N = 10000; cout << "==>" << endl; Numeral(N); 00057 N = 420; cout << "==>" << endl; Numeral(N); 00058 00059 system("PAUSE"); /// esta instruccion pausa el programa en este punto 00060 return 0;// salida correcta del programa 00061 } 00062 00063 // EOF: Numeral.cpp 00064
1.4.7