Как напечатать палиндром и простые числа в массиве - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь распечатать простые числа и числа палиндрома из массива. Это ничего не печатает, где я не прав?!

#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;
}

1 Ответ

1 голос
/ 07 октября 2019

Вы должны сделать вывод внутри циклов. Но, например, этот вывод выполняется вне цикла

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;

Более того, сравнение в приведенном выше утверждении if неверно. После цикла do-while значение num равно 0. Вам нужно написать

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

Также вывод простых чисел также производится вне цикла. Более того, вы неправильно определяете простые числа. Например, 1 - это простое число в соответствии с вашим алгоритмом.

Также в первом цикле вы должны повторно инициализировать переменную rev до 0.

Программу можно написать следующим образом

#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;
}

Его вывод может быть

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  
...