96 lines
2.6 KiB
C++
96 lines
2.6 KiB
C++
/*
|
|
AUTORE: Manuel Vichi
|
|
Descrizione di un numero
|
|
*/
|
|
#include <iostream>
|
|
#include <cmath>
|
|
#include <cstdlib>
|
|
using namespace std;
|
|
//Function to calculate the square of a number (because why not??)
|
|
int square(int x) {
|
|
return x * x;
|
|
}
|
|
|
|
//Boolean function to determinate if a number is automorphic
|
|
bool isAutomorphic(int num) {
|
|
int temp = num;
|
|
int digits = 0;
|
|
while (temp > 0) {
|
|
digits++;
|
|
temp /= 10;
|
|
}
|
|
int lastDigits = square(num) % static_cast<int>(pow(10, digits));
|
|
return lastDigits == num;
|
|
}
|
|
|
|
//Function to check if a number is prime
|
|
bool isPrimeNumber(int num) {
|
|
if (num <= 1)
|
|
return false;
|
|
for (int i = 2; i * i <= num; i++) {
|
|
if (num % i == 0)
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
//Function to check if a number is perfect
|
|
bool isPerfectNumber(int n) {
|
|
if (n <= 1)
|
|
return false;
|
|
int sum = 0;
|
|
for (int i = 1; i <= n / 2; ++i)
|
|
if (n % i == 0)
|
|
sum += i;
|
|
return sum == n;
|
|
}
|
|
|
|
//Function to reverse the number
|
|
int reverseNumber(int number) {
|
|
int original = number;
|
|
int reversed = 0;
|
|
while (number > 0) {
|
|
int digit = number % 10;
|
|
reversed = reversed * 10 + digit;
|
|
n /= 10;
|
|
}
|
|
return reversed;
|
|
}
|
|
|
|
//Function to check if a number is palindrome
|
|
bool isPalindrome(int n) {
|
|
int original = n;
|
|
int reversed = reverseNumber(n);
|
|
return original == reversed;
|
|
}
|
|
|
|
|
|
//Main function, asks in input the number and prints if it's automorphic or not
|
|
int main() {
|
|
int numero;
|
|
cout << "Inserisci il numero: ";
|
|
cin >> numero;
|
|
cout << endl;
|
|
cout << "Il numero " << numero << " fornito in input ha le seguenti caratteristiche:" << endl;
|
|
if (isAutomorphic(numero))
|
|
cout << "Il numero e' automorfo" << endl;
|
|
else
|
|
cout << "Il numero non e' automorfo" << endl;
|
|
if (isPrimeNumber(numero))
|
|
cout << "Il numero e' primo" << endl;
|
|
else
|
|
cout << "Il numero non e' primo" << endl;
|
|
if (isPerfectNumber(numero))
|
|
cout << "Il numero e' perfetto" << endl;
|
|
else
|
|
cout << "Il numero non e' perfetto" << endl;
|
|
if (isPalindrome(numero))
|
|
cout << "Il numero e' palindromo" << endl;
|
|
else
|
|
cout << "Il numero non e' palindromo" << endl;
|
|
cout << endl; //Just to separate the output of the program
|
|
cout << "Il numero " << numero << " invertito e': " << reverseNumber(numero) << endl;
|
|
system("pause"); //Needed on Windows to display the console output if the executable is not runned from a console
|
|
return 0;
|
|
}
|