#include using std::cin; using std::cout; using std::endl; class Entero { protected: long valor; public: Entero(long valor) : valor(valor) { } void imprimirPropiedades() const { cout << valor << (esPositivo() ? " es positivo" : " es negativo") << endl; cout << valor << (esPar() ? " es par" : " es impar") << endl; bool primo = esPrimo(); cout << valor << (primo ? " es primo" : " es compuesto") << endl; if ( ! primo ) imprimirFactores(); cout << valor << " tiene " << cantidadDigitos() << " digitos" << endl; cout << valor << (esCapicua() ? " es capicúa" : " no es capicúa") << endl << endl; } bool esPositivo() const { return valor > 0; } bool esPar() const { return valor % 2 == 0; } bool esPrimo() const { // Si se encuentra algún divisor, el número no será primo for ( long i = 2; i < valor; ++i ) if ( valor % i == 0 ) return false; return true; } void imprimirFactores() const { cout << "Los factores de " << valor << " son "; for ( long i = 1; i <= valor; ++i ) if ( valor % i == 0 ) cout << i << ' '; cout << endl; } unsigned cantidadDigitos() const { long digitos = 1; for ( long n = valor / 10; n; n /= 10 ) ++digitos; return digitos; } long invertido() const { // Exraer cada dígito (n % 10) del número original y construir un número nuevo // Los dígitos se extraen en el orden inverso long resultado = 0; for ( long n = valor; n; n /= 10 ) resultado = resultado * 10 + (n % 10); return resultado; } bool esCapicua() const { return valor == invertido(); } }; int main() { while ( true ) { long valor = 0; cout << "Número: "; cin >> valor; if ( valor <= 0 ) return 0; Entero entero(valor); entero.imprimirPropiedades(); } return 0; }