Search code examples
c++for-loopprimesdo-whilepalindrome

How to print the palindrome and prime numbers in an array


I'm trying to print the prime and the palindrome numbers from an array. It does not print me anything where am i wrong?!

#include <iostream>
#include <string>
using namespace std;

int main() {
    int x, n, i, num, digit, rev=0;
    int bar[100];
    cout << "Cate numere trebuie sa fie in Array?:";
    cin >> x;
    for (i = 0; i < x; i++) {
        cout << "bar[" << i << "]=";
            cin >> bar[i];
    }
    for (i = 0; i < x; i++) {
        num=bar[i];

        do
        {
            digit = num % 10;
            rev = (rev * 10) + digit;
            num = num / 10;
        } while (num != 0);
    }
    if (num == rev)
        cout << num;

    int y;
    bool prim = true;

    for (y = 2; y <= bar[i] / 2; ++y)
    {
        if (bar[i] % y == 0)
        {
            prim = false;

        }
    }
    if (prim)
        cout << bar[i];


    return 0;
}

Solution

  • You have to do the output inside loops. But for example this output is made outside a loop

    for (i = 0; i < x; i++) {
        num=bar[i];
    
        do
        {
            digit = num % 10;
            rev = (rev * 10) + digit;
            num = num / 10;
        } while (num != 0);
    }
    if (num == rev) // <===
        cout << num;
    

    Moreover the comparison in the if statement above is incorrect. After the do-while loop the value of num is equal to 0. You need to write

    if (bar[i] == rev) // <===
        cout << num;
    

    Also the output of prime numbers also is made outside a loop. Moreover you are determining prime numbers incorrectly. For example 1 is a prime number according to your algorithm.

    Also within the first loop you have to reinitialize the variable rev to 0.

    The program can be written the following way

    #include <iostream>
    
    int main() 
    {
        const size_t N = 100;
        int bar[N];
    
        cout << "Cate numere trebuie sa fie in Array?: ";
    
        size_t n = 0;
        std::cin >> n;
    
        if ( N < n ) n = N;
    
        for ( size_t i = 0; i < n; i++ ) 
        {
            std::cout << "bar[" << i << "] = ";
            std::cin >> bar[i];
        }
    
        std::cout << '\n';
    
        for ( size_t i = 0; i < n; i++ ) 
        {
            const int Base = 10;
            int num = bar[i];
            int rev = 0;
    
            do
            {
                int digit = num % Base;
                rev = rev * Base + digit;
            } while ( num /= Base );
    
            if ( bar[i] == rev ) std::cout << bar[i] << ' ';
        }       
    
        std::cout << '\n';
    
        for ( size_t i = 0; i < n; i++ ) 
        {
            bool prime =  bar[i] % 2 == 0 ?  bar[i] == 2 :  bar[i] != 1;
    
            for ( int j = 3; prime && j <=  bar[i] / j; j += 2 )
            {
                prime =  bar[i] % j != 0;
            }
    
            if ( prime ) std::cout <<  bar[i] << ' ';
        }
    
        std::cout << '\n';
    
        return 0;
    }
    

    Its output might be

    Cate numere trebuie sa fie in Array?: 10
    bar[0] = 121
    bar[1] = 11
    bar[2] = 131
    bar[3] = 13
    bar[4] = 143
    bar[5] = 14
    bar[6] = 1551
    bar[7] = 10
    bar[8] = 1234321
    bar[9] = 99
    
    121 11 131 1551 1234321 99 
    11 131 13