#include <stdio.h>
#include 
#include 

void factorialMenu() {
    int n, fact = 1;
    printf("Enter a number: ");
    scanf("%d", &n);
    if (n < 0) {
        printf("Factorial not defined for negative numbers.\n");
        return;
    }
    for (int i = 1; i <= n; i++) {
        fact *= i;
    }
    printf("Factorial of %d = %d\n", n, fact);
}

void primeCheckMenu() {
    int n, isPrime = 1;
    printf("Enter a number: ");
    scanf("%d", &n);
    if (n <= 1) {
        isPrime = 0;
    } else {
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                isPrime = 0;
                break;
            }
        }
    }
    if (isPrime)
        printf("%d is a Prime Number\n", n);
    else
        printf("%d is Not a Prime Number\n", n);
}

void palindromeMenu() {
    char str[100];
    int len, isPalindrome = 1;

    printf("Enter a string: ");
    scanf("%s", str);

    len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        if (str[i] != str[len - i - 1]) {
            isPalindrome = 0;
            break;
        }
    }

    if (isPalindrome)
        printf("\"%s\" is a Palindrome\n", str);
    else
        printf("\"%s\" is Not a Palindrome\n", str);
}

void gcdMenu() {
    int a, b, temp;
    printf("Enter first number: ");
    scanf("%d", &a);
    printf("Enter second number: ");
    scanf("%d", &b);
    while (b != 0) {
        temp = b;
        b = a % b;
        a = temp;
    }
    printf("GCD = %d\n", a);
}

void reverseMenu() {
    int n, reversed = 0;
    printf("Enter a number: ");
    scanf("%d", &n);

    int original = n;
    while (n != 0) {
        reversed = reversed * 10 + (n % 10);
        n /= 10;
    }
    printf("Reversed Number = %d\n", reversed);
}

int main() {
    int choice;

    while (1) {
        printf("\n--- Functional Calculator ---\n");
        printf("1. Factorial\n");
        printf("2. Prime Check\n");
        printf("3. Palindrome Check (String)\n");
        printf("4. GCD\n");
        printf("5. Reverse Number\n");
        printf("6. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        if (choice == 6) {
            printf("Exiting the program. Goodbye!\n");
            break;
        }

        switch (choice) {
            case 1:
                factorialMenu();
                break;
            case 2:
                primeCheckMenu();
                break;
            case 3:
                palindromeMenu();
                break;
            case 4:
                gcdMenu();
                break;
            case 5:
                reverseMenu();
                break;
            default:
                printf("Invalid choice. Please select a valid option.\n");
        }
    }

    return 0;
}