如何在阵列中打印回文和质数

问题描述 投票:0回答:1

我正在尝试从数组中打印质数和回文数。它没有打印出任何我错的地方?!

#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;
}
c++ for-loop primes do-while palindrome
1个回答
1
投票

您必须在循环内进行输出。但是例如,此输出是在循环外部进行的

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  
© www.soinside.com 2019 - 2024. All rights reserved.